2012-01-06 51 views
4

我按照以下方式覆盖Activity类;扩展活动标题不以自定义样式出现

public class MyCustomActivity extends Activity { 
... 
... 

} 

public class MyActivity extends MyCustomActivity { 
... 
... 

} 

而清单中的活动声明就是这样;

<activity 
    android:name=".MyCustomActivity" 
    android:label="@string/app_name" > 
</activity> 

<activity 
    android:name=".MyActivity" 
    android:label = "ChildActivity"> 

    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

我的问题是,在android:label="ChildActivity"在清单中定义的活动标题不与自定义样式出现。我怎么能使它在每个活动中都不需要拨打setTitle(charSeq);

编辑:

一件事(可怕的)我忘了提的是,我使用的自定义样式在下面的方式;

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/CustomTheme" > 
... 
... 
</application> 

编辑(后@ Mudassir的答案): 我使用的自定义标题栏的内容编排如下;

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="50dip" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:gravity="left" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/imageViewIcon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/vector_arts" 
      android:layout_marginLeft="-15dp" /> 

     <TextView 
      android:id="@+id/textTitleBar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</RelativeLayout> 
+0

您是否将“ChildActivity”作为标签?如果是从MyActivity的activity标签中移除标签属性。 – 2012-01-06 04:30:51

+0

你是否为这两个活动获得相同的标题? – kosa 2012-01-06 04:34:34

+0

我没有得到任何标题?我想实现默认行为,即在我的清单文件中设置'android:label'属性时,应该在不调用setTitle()方法的情况下设置该活动的标题。 – Khan 2012-01-06 04:39:57

回答

2

正如我理解你的问题,你正在使用文本视图(自定义样式)来显示标题文本。因此,要在自定义标题栏(文本视图)中显示默认标题文本(在清单中定义的文本(在android:label中定义)),您必须覆盖父项(MyCustomActivity)中的方法setTitle,如下所示;

@Override 
public void setTitle(CharSequence titleText) { 

    // Assuming you text view's name is titleTextView in the style XML file 
    TextView customTitle = (TextView) findViewById(R.id.titleTextView); 
    customTitle.setText(titleText); 
} 

然后从以下同类的onCreate()调用此方法;

setTitle(getTitle());

这将让清单文件中定义的活动标签,它(这里customTitle)传递给方法setTitle()这将显示它您的自定义标题栏是文本视图。请注意,只有在使用文本视图来显示标题文本时,此方法才有效。

+0

谢谢。它是我想要的。我忘了提及我正在使用的自定义样式。再次感谢。 – Khan 2012-01-06 12:11:13

+0

请更新您的问题以包含样式细节。 – Mudassir 2012-01-06 12:12:48

1

您正在启动MyActivity,你必须设置ChildActivity作为标题。 MyActivity是MyCustomActivity的子类。当你设置孩子班的标题时,它来到了前台。您所看到的活动实际上是儿童活动而非家长。所以ChildActivity的标题显示您

感谢 苏尼尔·库马尔Sahoo

+0

请参阅最新的问题。 – Khan 2012-01-06 05:45:20

2

你得到你在活动标题清单文件中设置相同的标题。 如果你这样做:

<activity android:name=".MyActivity" 
    android:label="ChildActivity" 
      > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".TestingMyAcivity"></activity> 

public class TestingMyAcivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

}

public class MyActivity extends TestingMyAcivity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
setContentView(R.layout.main_); 
} 

}

你在main_.xml文件的标题是 “ChildActivity” 和布局。

+0

请参阅最新的问题。 – Khan 2012-01-06 05:44:56