Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo configurar el icono de la barra de título para cada actividad en TabLayout

En mi ejemplo de tablayout, he creado tres pestañas, ya que normalmente establezco 3 actividades para cada ficha. Puedo fijar la imagen a la barra de título de la actividad, que agrega la intención a cada lengüeta. Debido a esto, la imagen en la barra de título está visible en las 3 pestañas. Mi requisito es establecer una imagen diferente a la barra de título para cada actividad. He seguido esto para establecer la imagen a la barra de título. Pero cuando voy a hacer lo mismo para cada actividad, get android.util.AndroidRuntimeException: You cannot combine custom titles with other title features este error y la aplicación se termina.

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> 

Gracias
Venu

3 Solutions collect form web for “Cómo configurar el icono de la barra de título para cada actividad en TabLayout”

Hola No puede utilizar la función Custom Title de las actividades que están anidadas en TabHost .

Es decir, si está solicitando título personalizado de la actividad A y la actividad B que están anidados en TabActivity Android lanzará la excepción mencionada anteriormente.

Solucionar este problema es dejar que TabActivity solicitar título personalizado . Y cambiar el contenido del título personalizado de TabActivity de dentro de la actividad A y la actividad B.

Otro consejo que puedo darle es anular la llamada onResume() de la actividad A y la actividad B para cambiar el título personalizado TabActivity.

EDIT: Código de ejemplo

Para la actividad de tu pestaña

 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 

Ahora para su Actividad A y 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); } 

}

Copiar en el curriculum vitae de ActivityA especificado anteriormente para B también.

Consejo: puedes cambiar el diseño del título de cada actividad usando esto.

Espero que eso ayude.

El título (estándar) que puedes cambiar fácilmente con

  1. Implementando onChildTitleChanged en TabActivity

     @Override protected void onChildTitleChanged(Activity childActivity, CharSequence title) { super.onChildTitleChanged(childActivity, title); setTitle(title); } 
  2. Establecer el título en las actividades infantiles, fe

     @Override protected void onResume() { setTitle("Calender"); super.onResume(); } 

Cambiar un título personalizado no debe ser tan difícil con esta estrategia. Fe todas sus actividades infantiles podrían implementar una interfaz y tener un método

  public int getTitleResource() 

La pestaña-actividad ahora puede hacer

  @Override protected void onChildTitleChanged(Activity childActivity, CharSequence title) { super.onChildTitleChanged(childActivity, title); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, ((TabChild)childActivity).getTitleResource()); } 

O puede transportar el ID como parte de la cadena-título-hijo y analizarla de nuevo a int …

 --------------------------- 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"); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.