tabhost studio iconos fragments example con activity android tabs customization android-3.0-honeycomb android-actionbar

studio - Barra de acción de Android: pestañas personalizadas y desbordamiento



tabs con fragments android (4)

Me está costando implementar pestañas personalizadas para la barra de acciones: necesito crear pestañas (me refiero a los botones) para usar gráficos personalizados para los estados normal y seleccionado.

He podido matar todo el estilo nativo usando

<style name="customActionBarTabStyle"> <item name="android:background">#00000000</item> </style>

y luego use Tab.setIcon () para que las pestañas se vean de la manera que necesito, pero necesito que reaccionen a la conmutación (al cambiar entre dos Drawables, para encendido y apagado).

Intenté crear un selector Drawable como este:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/btn_on" /> <item android:drawable="@drawable/btn_off" /> </selector>

pero las pestañas no cambian al modo presionado cuando se seleccionan.

Además, he intentado llamar a Tab.setIcon () en TabListener.onTabSelected () y .onTabUnselected () - sin suerte tampoco.

¿Alguien sabe una buena solución para este?

Además, necesito mostrar una vista personalizada en lugar de un menú de desbordamiento: ya busqué en Google un montón de "sugerencias" para repensar mi interfaz de usuario para "seguir el camino de Android", pero el problema es que la interfaz de usuario no es mía para reconsiderar. es el cliente :) así que realmente me gustaría encontrar una manera de solucionar las deficiencias de personalización de ActionBar.

Cualquier sugerencia es muy apreciada, gracias de antemano.


Aquí está mi código y el ícono cambian cuando se selecciona una pestaña, y cambian cuando no están seleccionados.

public class MainActivity extends FragmentActivity implements ActionBar.TabListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.activity_main); // Set up the action bar. final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setBackgroundDrawable(null); icons = new int[] { R.drawable.ic_facebook, R.drawable.ic_facebook, R.drawable.ic_facebook, R.drawable.ic_facebook, }; icons_selected = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher, }; // For each of the sections in the app, add a tab to the action bar. for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { // Create a tab with text corresponding to the page title defined by // the adapter. Also specify this Activity object, which implements // the TabListener interface, as the callback (listener) for when // this tab is selected. actionBar.addTab( actionBar.newTab() .setText(mSectionsPagerAdapter.getPageTitle(i)) .setIcon(icons[i]) .setTabListener(this) ); } }

y esto

@Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction){ getActionBar().getSelectedTab().setIcon(icons_selected[tab.getPosition()]); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { getActionBar().getSelectedTab().setIcon(icons[tab.getPosition()]); } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }


Creo que deberás usar android: seleccionatableItemBackground echa un vistazo a esto , puede ser útil.

Buena suerte


Intenta usar state_selected en lugar de state_pressed, solo intenta hacer algo similar aquí (cambiando las imágenes de fondo de las pestañas por completo) y parece que las pestañas de la barra de acciones solo ingresan seleccionado verdadero / falso pero no el estado presionado ...

EDITAR: Parece que la propiedad de fondo ingresa ese estado, pero no el color de texto utilizado en las pestañas ...


Solo para que la solución esté más presente:

@ taf dijo la solución: necesitas configurar el android:duplicateParentState="true" en el diseño principal que usas como una vista personalizada para tu pestaña.