java - studio - Diferencia entre ActionBarSherlock y la compatibilidad con ActionBar
menu action bar (7)
¿Cuál es la diferencia entre ActionBarSherlock y la compatibilidad de la barra de acciones?
Pocos días atrás Google acaba de lanzar la Compatibilidad de ActionBar que me confunde tanto. ¿Es que la Compatibilidad de la Barra de acciones funciona igual que la Barra de seguridad de acción y es la codificación misma?
Ejemplo: ¿Tiene el icono de la aplicación para navegar "arriba" o ActionBar.Tab compatible con la Compatibilidad de la Barra de acciones?
ActionBarSherlock le da a su aplicación una barra de acción sin importar * en qué versión de la API de Android se está ejecutando su aplicación. La Compatibilidad de la barra de acciones le proporciona la barra de acción solo si el dispositivo en el que está ejecutando tiene un nivel de API 3.0 o superior.
* Tenga en cuenta que si el dispositivo en el que se ejecuta no es 3.0 o superior, ActionBarSherlock usará su propia implementación personalizada de la barra de acciones, no una nativa.
--EDITAR--
Parece que las cosas han cambiado y en realidad ya no hay diferencia entre ActionBarSherlock y la Compatibilidad de la Barra de acciones. Por favor, lea los comentarios a continuación para más detalles.
--EDITAR--
Después de haber usado ambos ahora, puedo decir que en realidad prefiero ActionBarSherlock a la Compatibilidad de la Barra de Acción. ActionBarSherlock es realmente fácil de usar.
--EDIT-- Como se mencionó LOG_TAG, ahora hay soporte para la barra de acciones en la Biblioteca de soporte de Android. No he tenido la oportunidad de usarlo todavía, pero me imagino que es el mejor para usar.
Actionbar Sherlock es mucho más avanzado y mucho más ambicioso que el simple proyecto de compatibilidad de la barra de herramientas.
La compatibilidad con la barra de acciones se puede considerar como una "muestra" o un buen punto de partida si solo quieres golpear una barra de acciones en la parte superior de tu aplicación.
ActionBarSherlock se basa en la biblioteca de compatibilidad y le brinda (como la muestra de compatibilidad de la barra de acciones) una barra de acciones en dispositivos anteriores a la 3.0. Además, tiene características adicionales que no están presentes en el código de Compatibilidad de ActionBar. Esto incluye características como, pero no limitadas a
- setNavigationMode (para pestañas y marcadores en la barra de acciones)
- Fragmentos de diálogo
- Barra de acción contextual (CAB): un menú que toma la barra de acción, que se utiliza, por ejemplo, para la selección múltiple (http://developer.android.com/design/patterns/new-4-0.html) Esta es una función de ICS ( !) Para esto, una implementación de la clase ActionMode (introducida en el nivel API 11) tuvo que ser introducida en la biblioteca ActionbarSherlock
- Implementaciones Fragment y FragmentActivity: como los fragmentos pueden implementar el menú onCreateOptions, debemos asegurarnos de que se utiliza SupportMenuInflater.
- Dos temas no muy diferentes de Holo.Dark y Holo.Light (Theme.Sherlock, Theme.Sherlock.Light)
- El ICS presenta una "barra de acción dividida"
El único inconveniente que veo al usar ActionbarSherlock es que te encierras en esa biblioteca. Si por alguna razón se extingue en el futuro cercano, tendrá que mantenerlo usted mismo (por ejemplo, si no se implementa el Jellybean). Esto es una molestia (no es un gran problema) ya que todos sus fragmentos extienden SherlockFragemnt y todas sus actividades. SherlockActivity.
Bueno, la implementación de @Jake va más allá de lo que ofrece la barra de herramientas, para ser más precisos. La barra de herramientas de compatibilidad es solo un ejemplo básico de cómo puedes admitir todas las aplicaciones con una barra de pseudoacción para versiones anteriores a Honeycomb (API 13). Aunque su objetivo es la misma barra de acciones compatible cruzada, tienen un enfoque diferente.
ActionbarCompat Approach
Esta implementación no hace uso de la biblioteca de compatibilidad Compatibility Android en su lugar crea una clase base llamada ActionBarActivity Crea una instancia única de un Helper Este helper actúa como fábrica en sí misma y devuelve una implementación diferente para los tres segmentos de APIS.
- ActionbarBaseHelper : para antes de HoneyComb.
- ActionBarHoneyComb : para HoneyComb
- ActionBarHelperICS : para dispositivos base ICS.
La parte más interesante está en ActionbarBaseHelper , porque tiene el código más importante. Sugiero que entiendas esta clase y obtendrás todo el ejemplo.
Barra de acción Sherlock
Bueno, esto es complicado primera vez porque, yo no soy el autor, tal vez Jake puede explicar más esto, pero voy a intentarlo.
Así como el compat Sherlock realiza una implementación diferente, pero uno es para "Compat" y el otro es Native. Te obliga a extender desde SherlockActivity o desde SherlockFragmentActivity, porque estas dos clases base tienen el método para enviar ActionBar.
Este es un proyecto grande y complejo, que no se puede explicar en una sola publicación. Te sugiero que caves alrededor de Sherlock Github repo echa un vistazo y como dice Jeff Atwood
Simplemente completando lo que @Kurtis Nusbaum con un ejemplo práctico.
ACTUALIZACIÓN: como dijo @ rudy-s, con la biblioteca de soporte de Android más nueva (api 18), vi que ya tienen soporte incorporado para la barra de acciones (llamada clase ActionBarCompat).
Creé dos aplicaciones simples para mostrar la diferencia visual entre ActionBarSherlock y la compatibilidad con ActionBar. Ver las imágenes comparativas:
Ahora la apariencia cuando se presiona el botón de menú:
Como puede ver, las imágenes solo hacen cumplir lo que se dijo. La Compatibilidad de la barra de acciones le proporciona la barra de acción solo si el dispositivo en el que está ejecutando tiene un nivel de API 3.0 o superior. Mientras que Sherlock es más general.
A continuación puede ver el origen de la aplicación.
El archivo de menú xml es el mismo:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_1"
android:orderInCategory="100"
android:showAsAction="always"
android:title="@string/action1"/>
<item
android:id="@+id/action_2"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action2"/>
<item
android:id="@+id/action_3"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action3"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
</menu>
Actividad de compatibilidad:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Actividad de Sherlock:
public class MainActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
}
Una configuración adicional era necesaria en la aplicación sherlock:
<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">
ACTUALIZACIÓN: como dijo @ rudy-s, con la biblioteca de soporte de Android más nueva (api 18), vi que ya tienen soporte incorporado para la barra de acciones (llamada clase ActionBarCompat).
Tal vez deberíamos actualizar la respuesta porque Google publicó el soporte oficial de Actionbar desde API18 .
El siguiente bloque es del android-developers.blogspot.in/2013/08/… sobre estas dos bibliotecas:
Si está utilizando una solución de terceros (como ActionBarSherlock), existen algunas razones para considerar la actualización:
- Se puede mantener actualizado a medida que evoluciona la API de Action Bar.
- Soporte integrado de navegación ancestral.
- Uso del menú de framework y las clases de MenuItem.
- Continúa usando la clase Fragmento de la Biblioteca de soporte.
- Soporte integrado para ActionBarDrawerToggle para usar con DrawerLayout.
- Backport de PopupMenu.
ActionBarSherlock es una biblioteca sólida y bien probada que ha servido a los desarrolladores muy bien durante mucho tiempo. Si ya lo está utilizando y no requiere ninguno de los anteriores, no es necesario migrar.
ActionBarSherlock vs ActionBarCompat:
Solo quiero poner algunas diferencias de código entre ActionBarSherlock vs ActionBarCompat Lib
Podemos migrar algunas aplicaciones de ActionBarSherlock a ActionBarCompat:
pasos:
Importar proyecto de AppCompat .
Reemplace
SherlockFragmentActivity
conActionBarActivity
.Reemplace
SherlockFragment
conFragment
.Menu
cambio, referencias deMenuItem
ygetSupportMenuInflater()
. Modifique la forma en que obtiene Vistas de Acción.mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)
- Modifique sus Temas y Estilos .
Para obtener más información, consulte estas diapositivas por +NickButcher (Google)
Gracias a Sources: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/
¡No olvides leer este developer.android para obtener más información sobre ABC!
Nota: Configurarlo para las pruebas unitarias de la misma manera que el ABS no es desafortunadamente posible con la biblioteca de soporte.
Salida:
Créditos: Gabriele Mariotti
Creo firmemente que debes usar
ActionBarCompat
para todos los proyectos nuevos que quieran admitir dispositivos más antiguos.También podría tener sentido migrar proyectos existentes. Así que sigue leyendo para saber por qué debes migrar o usar ActionBarCompat de inmediato y cómo migrar los proyectos existentes.
¿Por qué debería preferir ActionBarCompat sobre ActionBarSherlock?
Hay muchas razones por las que debería preferir ActionbarCompat sobre ActionbarSherlock.
En primer lugar, este proyecto es de Google, es parte de la Biblioteca de soporte y es probable que admita nuevas cosas relacionadas con Action Bar al mismo tiempo que Google las lanza con Android.
Otra buena razón es que es compatible con el
Navigation Drawer pattern
nada más sacarlo de la caja, mientras que ActionBarSherlock no. Por lo tanto, si desea agregar este cajón a un proyecto / aplicación existente, debe migrar.Lo último e importante es que el creador de ActionBarSherlock, Jake Wharton, anunció en Google+ que se detuvo el desarrollo de ActionBarSherlock. ActionBarSherlock 4.4 es la última versión y es posible que obtenga correcciones de errores, pero no habrá nuevas características: si se incluye una nueva funcionalidad en la barra de acciones, puede que no lo haga con actionbarsherlock.