如何在TabLayout中为每个活动设置图标到标题栏

Ven*_*pal 5 android

在我的tablayout示例中,我创建了3个选项卡,因为通常我为每个选项卡设置3个活动.我可以将图像设置为活动的标题栏,这会将意图添加到每个选项卡.因此,标题栏中的图像在所有3个选项卡中都可见.我的要求是为每个活动的标题栏设置不同的图像.我按照这个将图像设置为标题栏.但是,当我要对每个活动执行相同的操作时,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>
Run Code Online (Sandbox Code Playgroud)

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);
    ....
    ....
Run Code Online (Sandbox Code Playgroud)

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);     

}
Run Code Online (Sandbox Code Playgroud)

}

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>
Run Code Online (Sandbox Code Playgroud)

谢谢
venu

Sha*_*dul 6

您好,您不能使用Custom Title嵌套的活动中的功能TabHost.

也就是说,如果您要求活动A活动B中的自定义标题嵌套在TabActivity中, Android将抛出您在上面提到的异常.

解决此问题的方法是让TabActivity请求自定义标题.并从活动A和活动B内部更改TabActivity的自定义标题的内容.

我可以给你的另一个提示是覆盖onResume()活动A和活动B 的调用以更改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
Run Code Online (Sandbox Code Playgroud)

现在为你的活动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);
}
Run Code Online (Sandbox Code Playgroud)

}

复制上面为B指定的ActivityA的简历.

提示:您可以使用此更改从每个活动更改标题布局.

我希望有所帮助.