在我的tablayout示例中,我创建了3个选项卡,因为通常我为每个选项卡设置了3个活动。我可以将图像设置为活动的标题栏,这会将意图添加到每个选项卡。因此,标题栏中的图像在所有3个选项卡中都可见。我的要求是为每个活动的标题栏设置不同的图像。我按照this将图像设置为标题栏。但是,当我要对每个活动做同样的事情时,得到android.util.AndroidRuntimeException: You cannot combine custom titles with other title features
此错误并终止应用程序。
的manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.aptitsolution.tablayout"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/MyTheme">
<activity android:name=".TabLayoutDemo"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="AlbumsActivity"></activity>
TabLayoutDemo.java
public class TabLayoutDemo extends TabActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
Resources res = getResources();
TabHost tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, ArtistsActivity.class);
spec = tabHost.newTabSpec("artists").setIndicator("Artists",
res.getDrawable(R.drawable.ic_tab_artists))
.setContent(intent);
tabHost.addTab(spec);
....
....
ArtistsActivity.java
public class ArtistsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);//i am getting the error here
setContentView(R.layout.artists);
setFeatureDrawableResource(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
}
}
my_title.xml
<RelativeLayout android:id="@+id/header"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:layout_width="fill_parent">
<ImageView android:src="@drawable/nowplaying"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:id="@+id/title" android:layout_width="wrap_content"
android:text="New Title" android:layout_height="wrap_content"/></RelativeLayout>
感谢
VENU
答案 0 :(得分:6)
您好!您无法在Custom Title
嵌套的活动中使用TabHost
功能。
如果您要从活动A 和活动B 请求自定义标题,这些标题嵌套在 TabActivity 中,Android将抛出您提到的异常上方。
解决此问题的方法是让TabActivity请求自定义标题。并从活动A和活动B中更改TabActivity的Custom Title的内容。
我可以给你的另一个提示是覆盖活动A和活动B的onResume()
调用,以更改TabActivity自定义标题。
编辑:示例代码
用于标签活动
public class TabLayoutDemo extends TabActivity {
//CREATING A PUBLIC STATIC VARIABLE
public static TabLayoutDemoInstance myTabLayoutDemo;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
TabLayoutDemo.TabLayoutDemoInstance=this;//STORING
//COMMENTING SET FEATURE IN TAB
//getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
//REST CODE REMAINS SAME
现在为您的活动A和B
public class ActivityA extends Activity{
//LOST MORE CODE ABOVE
@Override
protected void onResume() {
super.onResume();
//SET FEATURE FROM INSIDE ACTIVITY
TabLayoutDemo.TabLayoutDemoInstance.getWindow().
setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
}
}
复制上面为B指定的ActivityA的简历。
提示:您可以使用此更改从每个活动更改标题布局。
我希望有所帮助。
答案 1 :(得分:4)
您可以使用
轻松更改(标准)标题在TabActivity中实现onChildTitleChanged
@Override
protected void onChildTitleChanged(Activity childActivity, CharSequence title) {
super.onChildTitleChanged(childActivity, title);
setTitle(title);
}
在子活动中设置标题,例如
@Override
protected void onResume() {
setTitle("Calender");
super.onResume();
}
使用此策略更改自定义标题不应该那么难。 F.E.您的所有子活动都可以实现一个接口并有一个方法
public int getTitleResource()
标签活动现在可以
@Override
protected void onChildTitleChanged(Activity childActivity, CharSequence title) {
super.onChildTitleChanged(childActivity, title);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, ((TabChild)childActivity).getTitleResource());
}
或者您可以将id作为child-title-string的一部分传输并将其解析回int ...
答案 2 :(得分:0)
--------------------------- One more Action for the same --------------------
Step Declare instance of class:
Parent Tab Activity:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.tab_layout_title);
TabLayoutActivity.tabLayout = this;
TextView titleText = (TextView) findViewById(R.id.myTitle);
titleText.setText("Care");
Child Activity
@Override
protected void onResume() {
super.onResume();
TabLayoutActivity.tabLayout.titleText.setText("Title name");
}