¿Cuál es la mejora de AppCompatActivity sobre ActionBarActivity?

164

android.support.v7.app.AppCompatActivity fue agregado a la última biblioteca de soporte v7 como una nueva característica ayer.

Se dice que ActionBarActivityha quedado en desuso en favor de lo nuevo AppCompatActivityy que AppCompatActivityes una clase base para actividades que utilizan las funciones de la barra de acciones de la biblioteca de soporte. Entonces, ¿cuáles son las nuevas características de AppCompatActivityOver ActionBarActivity? ¿Qué mejoras AppCompatActivitytienen más ActionBarActivity? ¿Y cuáles son las ventajas de AppCompatActivity? ¿Alguien podría suministrar algunas muestras?

Cualquier consejo es apreciado. Y gracias de antemano.

PD: lo que más me sorprendió es que lo AppCompatActivityque se extiende android.support.v4.app.FragmentActivityes la clase directa de padres ActionBarActivity. Quiero decir, en realidad ahora que ActionBarActivitypuede hacer cualquier cosa que AppCompatActivitypueda hacer, ¿por qué Android eliminó lo último?

Mientras tanto, vi una publicación de blog que dice: " No es un cambio de nombre de ActionBarActivitya AppCompatActivity, la lógica interna de AppCompatestá disponible a través deAppCompatDelegate ", entonces, ¿cuál es la " lógica interna " AppCompat? Que puede AppCompatDelegatehacer ¿Alguien podría publicar algunos códigos sobre esto?

SilentKnight
fuente
Lo he leído, es una introducción, demasiado superficial.
SilentKnight
1
AppCompatActivity es la clase principal de ActionBarActivity. Y para obtener más ideas, debe buscar en el código.
Pankaj Kumar
Sí, me di cuenta de esto.
SilentKnight

Respuestas:

145

Como Chris escribió, la nueva versión obsoleta de ActionBarActivity(la AppCompatActivityclase que se extiende ) es una clase de compatibilidad con versiones anteriores segura para usar. Su desaprobación es solo una pista para que solicites usar new AppCompatActivitydirectamente en su lugar. AppCompatActivityes una implementación nueva y más genérica que usa AppCompatDelegateclase internamente.

Si comienza un nuevo desarrollo, entonces debería usar una nueva AppCompatActivityclase de inmediato. Si tiene la oportunidad de actualizar su aplicación, también reemplace en desuso ActionBarActivitypor la nueva actividad. De lo contrario, puede permanecer con actividades obsoletas y no habrá ninguna diferencia en el comportamiento.

En cuanto a esto AppCompatDelegate, le permite tener nuevos widgets tintados en una actividad, que no es ni AppCompatActivitytampoco ActionBarActivity.

Por ejemplo, hereda una actividad de una biblioteca externa, que, a su vez, no hereda de AppCompatActivitypero desea que esta actividad tenga widgets (vistas) de materiales tintados. Para que esto suceda, debe crear una instancia AppCompatDelegatedentro de su actividad, anular los métodos de esa actividad como addContentView(), setContentView()etc. (consulte AppCompatDelegatejavadoc para obtener la lista completa de métodos), y dentro de esos métodos anulados, reenviar las llamadas a la AppCompatDelegateinstancia interna . AppCompatDelegatehará el resto y su actividad "antigua" se "materializará".

sergej shafarenka
fuente
Buen ejemplo .. Gracias @ sergej shafarenka
Rakesh L
2
¿Puede decirme qué sucede cuando usaré Activity en lugar de Appcompactivity? He buscado pero no
obtuve
35

Es principalmente un cambio de nombre: en ActionBarActivityrealidad no describe todo lo que hace ahora. Puede usarlo con seguridad ActionBarActivitysi lo desea. Piense en ello como un enlace simbólico.

Chris Banes
fuente
AppCompatActivityes la clase principal directa de ActionBarActivity, ahora que ActionBarActivitypuede hacer cualquier cosa que AppCompatActivitypueda hacer, ¿por qué Androidrechazar la posterior?
SilentKnight
44
@SilentKnight: Como Chris escribió, es principalmente un cambio de nombre. Citando el Blog de desarrolladores de Android : "La biblioteca de soporte de AppCompat comenzó con un principio humilde pero importante: una barra de acción única y coherente para todos los dispositivos API 7 y superiores. En la revisión 21, asumió una nueva responsabilidad: traer paleta de colores de material, tintado de widgets, Soporte de barra de herramientas, y más para todos los dispositivos API 7+. Con eso, el nombre ActionBarActivity realmente no cubrió el alcance completo de lo que realmente hizo ".
CommonsWare
3
No es seguro usar clases obsoletas, ya que están sujetas a eliminación en futuras versiones. Aunque puede reemplazar fácilmente todas las referencias a ActionBarActivitycuando se descarta de la biblioteca de soporte (por ejemplo, al actualizar su aplicación), recomendaría evitar usarla de ahora en adelante.
david.schreiber
12

La biblioteca de soporte de AppCompat comenzó con principios humildes pero importantes: una única barra de acción consistente para todos los dispositivos API 7 y superiores. En la revisión 21, asumió una nueva responsabilidad : llevar paleta de colores de materiales, tintado de widgets, soporte de barra de herramientas y más a todos los dispositivos API 7+. Con eso, el nombre ActionBarActivity realmente no cubrió el alcance completo de lo que realmente hizo .

http://android-developers.blogspot.it/2015/04/android-support-library-221.html

AndroidGecko
fuente
¿Puede decirme qué sucede cuando usaré la Actividad en lugar de Appcompactivity? He buscado pero no
obtuve
9

AppCompatActivityse introdujo en Android-SDK desde el lanzamiento de la biblioteca de compatibilidad de aplicaciones de Android .

AppCompatActivityes la clase secundaria directa FragmentActivityde soporte v4 y la clase primaria directa de ActionBarActivity.

AppCompatActivityes la clase base para actividades que utilizan las funciones de la barra de acción de la biblioteca de soporte .

Puede agregar un elemento ActionBara su actividad cuando se ejecuta en el nivel de API 7 o superior extendiendo esta clase para su actividad y configurando el tema de la actividad en Theme.AppCompat o un tema similar.

En cuanto a la biblioteca de compatibilidad de aplicaciones v7, agrega compatibilidad con el patrón de diseño de la interfaz de usuario de la Barra de acciones . Esta biblioteca incluye soporte para implementaciones de interfaz de usuario de diseño de materiales .

Estas son algunas de las clases clave incluidas en la biblioteca v7 appcompat:

  • ActionBar - Proporciona una implementación del patrón de interfaz de usuario de la barra de acción.
  • AppCompatActivity- Agrega una clase de actividad de aplicación que se puede usar como clase base para actividades que usan la implementación de la barra de acción de la Biblioteca de soporte .
  • AppCompatDialog- Agrega una clase de diálogo que se puede usar como clase base para los diálogos temáticos de AppCompat .
  • ShareActionProvider - Agrega soporte para una acción de compartir estandarizada (como correo electrónico o publicación en aplicaciones sociales) que se puede incluir en una barra de acción.

Después de descargar las Bibliotecas de soporte de Android , esta biblioteca se encuentra en el directorio / extras / android / support / v7 / appcompat / .

SilentKnight
fuente
¿Qué hay de android.support.v4.app.ActivityCompat? ¿Es este el antiguo nombre de AppCompatActivity?
Taylan
7

Anteriormente, el único punto de entrada AppCompatera a través de la ActionBarActivityclase ahora en desuso . Desafortunadamente, esto te obligó a usar una jerarquía de actividad establecida que hizo cosas como usarPreferenceActivity fueran imposibles.

Para más información, consulte las bibliotecas de soporte de Chris Banes v22-1-0

puntero nulo
fuente
1
Es el blog de Chris, muy apreciado.
SilentKnight
2

La última versión de la biblioteca de soporte de Android, 22.1, desaprueba la versión ActionBarActivitya favor de AppCompatActivity, que promete traer una única coherente ActionBarpara todos los dispositivos que comiencen con API Nivel 7 y superior

Arpit Gandhi
fuente