2012-10-05 51 views

Respuesta

39

Como noté en un comentario, no estoy exactamente seguro de si algo de esto cambiaría con ABS (estoy seguro que no mucho), pero con la barra de acciones estándar puede cargar un diseño personalizado .xml para su título de la barra de acción. Por ejemplo, usted podría tener action_bar_title.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/your_desired_background" > 

<TextView 
     android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:maxLines="1" 
      android:ellipsize="end" 
      android:text="@string/app_name" 
      android:textAppearance="?android:attr/textAppearanceMedium"/> 

</RelativeLayout> 

Luego, en su actividad, que se quiere llamar a un método como este en onCreate():

private void setupActionBar() { 
     ActionBar ab = getActionBar(); 
     ab.setDisplayShowCustomEnabled(true); 
     ab.setDisplayShowTitleEnabled(false); 
     ab.setIcon(R.drawable.your_left_action_icon); 
     LayoutInflater inflator = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflator.inflate(R.layout.action_bar_title, null); 

     TextView titleTV = (TextView) v.findViewById(R.id.title); 
     Typeface font = Typeface.createFromAsset(getAssets(), 
       "fonts/your_custom_font.ttf"); 
     titleTV.setTypeface(font); 

     ab.setCustomView(v); 

      ab.setHomeAsUpEnabled(true); 
    } 

para tomar el control de la izquierda elemento de acción, que podría hacer esto en su actividad:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.yourRightActionItem: 
         //do something 
         return true; 
     case android.R.id.home: //<-- this will be your left action item 
      // do something 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

por supuesto, asegúrese de que también lo hace el resto de las configuraciones necesarias para los elementos de acción en el menú de XML también. Esto será para cualquier elemento de acción del lado derecho.

Editar: Sólo vi en otro comentario que dijiste que el título sería una imagen. Si ese es el caso, simplemente reemplace el TextView que utilicé en mi ejemplo con su ImageView, y descarte el código de personalización de la fuente en el método setupActionBar().

Edit2: Actualicé mi código de Java. Tendrá que hacer ab.setHomeAsUpEnabled (true) y luego tener un tema personalizado para implementar un invisible (o tal vez @null aunque no sé si Android lo aceptará) dibujable para el inicio como indicador ascendente. Vea aquí (tomado de respuesta here :)

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo"> 
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item> 
    <!-- or you could try @null --> 
</style> 
+0

por lo que la solución al punto de acción de la izquierda sería que fingir usando el botón UP como escribí en el primer comentario, ¿verdad? – urSus

+0

Sí, y usted querría agregar un estilo personalizado para android: homeAsUpIndicator para que no obtenga ese indicador de chevron izquierdo. Voy a actualizar con más código. – dennisdrew

+0

¿Cómo puedo ocultar la flecha sin android: homeAsUpIndicator? Requiere API nivel 11 y mi mínimo es 8 –

Cuestiones relacionadas