Barra de acciones: práctica recomendada para versiones anteriores de Android

Me gustaría tener una barra de menú en la parte superior de mi aplicación – al igual que Facebook, Google+ o Twitter tienen:

Aquí se muestra una captura de pantalla de la aplicación de Twitter que muestra esta barra: Se muestra en cada actividad y muestra el logotipo de la empresa a la izquierda (clicable) y 1-3 elementos de menú (imágenes clicables) a la derecha.

Introduzca aquí la descripción de la imagen

También se puede ver en la aplicación GDCatalog:

Introduzca aquí la descripción de la imagen

Así que hay algunos requisitos para que la barra de acción:

  • También tiene que funcionar en plataformas Android más antiguas, como el nivel 8 de la API.
  • Tiene que estar disponible en cada actividad sin repetir el código una y otra vez.
  • Tiene que adaptarse al tamaño de la pantalla para que tome todo el ancho.

¿Cuál es la mejor práctica para implementar tal barra de acción?

GreenDroid lo hace así (usando combinaciones):

<?xml version="1.0" encoding="utf-8"?> <!-- /* ** Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com) ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ --> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <ImageButton xmlns:android="http://schemas.android.com/apk/res/android" style="?attr/gdActionBarItemStyle" android:id="@+id/gd_action_bar_item" android:layout_height="fill_parent" android:scaleType="center" /> <ImageView android:layout_width="?attr/gdActionBarDividerWidth" android:layout_height="fill_parent" android:background="?attr/gdActionBarDividerDrawable" /> <TextView style="?attr/gdActionBarTitleStyle" android:id="@+id/gd_action_bar_title" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="left|center_vertical" android:singleLine="true" android:textColor="?attr/gdActionBarTitleColor" android:textSize="16sp" android:textStyle="bold" android:paddingRight="10dp" android:paddingLeft="10dp" /> </merge> 

¿Es esta una buena solución? ¿Funcionará también en plataformas más antiguas? ¿Qué partes codificantes siguen faltando aquí?

Sé que podemos encontrar varias preguntas sobre estas barras de acción aquí todavía. Pero, sin embargo, no pude averiguar cuál es la mejor y más fácil forma de implementar la barra de menús trabajando en casi todos los niveles de API. ¿Es la solución de Google quizás la mejor?

¡Muchas gracias por adelantado!

Es posible que desee comprobar el ActionBarSherlock . El código fuente está disponible aquí . Le dará una idea de cómo se utiliza junto con fragmentos. Le dará una idea de cómo proceder.

Hay una biblioteca de compatibilidad de Android que google creado para utilizar algunos de los nuevos API que crearon para panal en la versión inferior, como 1,5 y superior. Se puede encontrar en la carpeta sdk android como E: \ Archivos de programa \ Android \ android-sdk-windows \ android-compatibilidad \ v4 \ android-support-v4.jar. Si no tiene este frasco, necesitará descargarlo usando el administrador de avd.

Mi preferencia personal es usar AndroidBarSherlock. Es un paquete excelente y funciona muy bien. Si quieres evitar fragmentos, también puedes usar Android-ActionBar . La única cosa sobre el android-actionbar es que usted tendrá que agregar la barra de acción a cada uno de sus diseños.

Lo que he hecho se agrega un archivo de diseño xml llamado titlebar.xml, que se parece a algo así:

 <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" style="@style/FullWidth"> <RelativeLayout style="@style/FullWidth"> <ImageView style="@style/WrapContent" android:src="@drawable/mylogo" android:layout_centerVertical="true" android:id="@+id/imageViewIcon" /> <TextView style="@style/Title" android:layout_toRightOf="@+id/imageViewIcon" android:layout_toLeftOf="@+id/buttonSomeButton" android:id="@+id/textViewAppName" android:text="@string/appName"/> <TextView style="@style/SubTitle" android:text="@string/empty" android:layout_marginLeft="3dip" android:layout_toRightOf="@+id/imageViewIcon" android:layout_toLeftOf="@+id/buttonSomeButton" android:layout_below="@+id/textViewAppName" android:id="@+id/textViewSubtitle" /> <Button style="@style/NormalButton" android:id="@+id/buttonSomeButton" android:drawableRight="@drawable/button_image" android:layout_centerVertical="true" android:layout_alignParentTop="true" android:layout_alignParentRight="true" /> </RelativeLayout> </merge> 

Y entonces he creado un control que extiende LinearLayout llamado TitleBar.java, que se parece a algo así:

 package com.sample.ui; public class TitleBar extends LinearLayout { public TitleBar(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.titlebar, this); } } 

Puede conectar todos los botones dentro de esta clase. Si necesita tener controladores de botones personalizados, puede crear métodos definidos en esta clase. Lo mantiene todo bien contenido en un solo control.

Para usarlo en cualquier archivo XML en el que quiera incluir esta barra de título, para hacerlo así:

 <com.sample.ui.TitleBar style="@style/FullWidth" /> 

Eso funciona bien para mis propósitos, y es compatible con 2.1 y superior. No he probado con debajo de 2.1, pero no veo porqué no trabajaría con versiones anteriores.

Google ha añadido soporte para ActionBars en versiones anteriores de Android en la última versión de la Biblioteca de soporte de Android (18). Tienes que usar una ActionBarActivity e incluir la biblioteca de soporte de android.support.v7.appcompat. Proporciona soporte de nuevo a API 7 (2.1)

¿Qué pasa con la simple creación de un archivo de diseño XML, por ejemplo, "top_bar.xml", incluido en el diseño de cada actividad?

Por lo tanto, en el archivo de disposición de cada una de las actividades, necesita un diseño lineal (orientación vertical) como padre y, a continuación, agregue lo siguiente:

 <include layout="@layout/custom_action_bar" android:id="@+id/action_bar" /> 

A continuación, tiene que agregar los oyentes onclick para todos los elementos de su barra de acción personalizada al archivo de origen para estas actividades.

Y el archivo de diseño "custom_action_bar.xml" podría verse así:

 <merge xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/APP_ICON" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ff0000" android:text="APP_TITLE"> </merge> 

Esto no es una solución simple, pero probablemente uno que funciona en todas las versiones de la plataforma Android, ¿verdad?

  • ¿Cuál es el equivalente de Android a la aplicación de ejemplo de UICatalog de iOS / iPhone?
  • AutoCompleteTextView siempre mantiene el foco
  • Cómo insertar texto extraíble
  • Barra de acción de Android como muestra de twitter
  • ¿Cómo puedo configurar el estado seleccionado de un botón de imagen con xml
  • Diseño de cuadrícula de botones 2x2
  • ¿Cómo hacer que el texto brille?
  • La vista personalizada de Android solo recibe onDraw una vez
  • Cómo probar el evento swipe / fling usando jUnit en Android testcase
  • Gestión de diferentes resoluciones de pantalla para imágenes de fondo en Android
  • ¿Hay alguna manera de mostrar una excepción personalizada en una alerta en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.