Estoy teniendo un problema extraño Estoy haciendo una aplicación con targetsdk 13.
En el método onCreate de mi actividad principal, llamo getActionBar()
para configurar mi barra de acciones. Esto funciona bien cuando se ejecuta en el emulador de Android 3.2, pero cuando se usa Android 3.0 y 3.1 el getActionBar()
método devuelve nulo.
Esto me parece extremadamente extraño, y no puedo ver ninguna razón por la que lo haría. ¿Es esto un error con los emuladores o hay algo que deba hacer para garantizar que mi aplicación tenga una barra de acción?
SOLUCIÓN:
Creo que he encontrado una solución para este problema. No estaba usando setContentView para establecer un diseño para la actividad. En cambio, estaba usando fragmentTransaction.add(android.R.id.content, mFragment, mTag)
para agregar un fragmento a la actividad. Esto funcionó bien en 3.2, pero en versiones anteriores de nido de abeja, la barra de acción aparentemente no se establece si no usa setContentView en el onCreate()
método. Así que lo arreglé utilizando el setContentView()
método en mi onCreate()
método y simplemente proporcionándole un diseño que contenía un FrameLayout vacío. Todavía puedo usar el fragmentTransaction.add(android.R.id.content, mFragment, mTag)
método de la misma manera que antes.
No es la solución más bonita, pero funciona.
fuente
Respuestas:
Se puede usar en
getSupportActionBar()
lugar degetActionBar()
método.fuente
Si está utilizando la biblioteca de soporte
usar en
getSupportActionBar()
lugar degetActionBar()
* Actualización:
La clase ActionBarActivity ahora está en desuso:
Recomiendo usar:
fuente
android.support.v7.app
:ActionBarActivity
uso obsoleto en suandroid.support.v7.app.AppCompatActivity
lugar.Debe definir el tipo de ventana como barra de acción antes de que la actividad muestre su vista.
utilizar
antes de llamar al método setContentView ().
fuente
si está utilizando android.support.v7.app.AppCompatActivity
clase pública HomeActivity extiende AppCompatActivity {
Entonces deberías estar usando android.support.v7.app.ActionBar
Si está utilizando android.support.v4.app.FragmentActivity
clase pública HomeActivity extiende FragmentActivity {
entonces deberías estar usando android.app.ActionBar
Si estas usando android.support.v7.app.ActionBarActivity
clase pública HomeActivity extiende ActionBarActivity {
deberías estar usando android.support.v7.app.ActionBar
fuente
Me enfrenté al problema anterior donde el
getActionBar()
método devuelve nulo. Estaba llamando algetActionBar()
después de configurar elsetContentView()
y todavía está regresando anull
.Resolví el problema configurando la versión min-sdk en el archivo de manifiesto de Android que faltaba inicialmente.
<uses-sdk android:minSdkVersion="11" />
fuente
ActionBar necesita el tema de la aplicación o actividad para tener un título de aplicación. Asegúrese de no haber diseñado su aplicación o actividad como Theme.NOTITLE.
fuente
luego
luego usa
fuente
Esta respuesta llega tarde pero puede ser útil para cualquier persona que llegue de Google: es posible que deba declarar
en su
styles.xml
. Parece quefalse
puede ser el predeterminado. También debe estar en API 11 o superior.Más detalles se pueden encontrar en la documentación aquí . Específicamente, cite:
fuente
Tuve el mismo problema y una de las soluciones fue usar
setContentView()
antes de llamargetActionBar()
.Pero había otra cosa que solucionó el problema. Especifiqué el tema para la aplicación
@android:style/Theme.Holo.Light
.Creo que
<item name="android:windowActionBar">true</item>
se puede usar cualquier tema que tenga .fuente
La razón principal de esto es usar temas que no son compatibles con ActionBar:
En el archivo de manifiesto, agregue lo siguiente en su actividad de destino o en el elemento de la aplicación (si desea unificar el tema en toda la aplicación)
Ejemplos de temas que admiten barra de acción
"Theme.AppCompat.Light"
o"Theme.Holo.Light"
...Es mejor poner todos los estilos
styles.xml
y usarlos en todas partes"@style/themName"
para que el anterior seay styles.xml tendrá lo siguiente:
Consejos:
"@android:style/Theme.Holo.Light.DarkActionBar"
no se admite antes de SDK versión 14.Para permitir que su aplicación admita una versión mínima específica de SDK, puede agregar el siguiente
<app>
elemento:Para especificar la versión mínima de SDK en AndroidStudio, puede hacerlo utilizando el archivo Gradle de la aplicación.
fuente
Me encontré con este problema. Estaba buscando el número de versión y habilitando la barra de acción solo si es mayor o igual a Honeycomb, pero estaba regresando nulo. Encontré que la razón y la causa raíz era que había deshabilitado el estilo Holo Theme en style.xml en la carpeta values-v11.
fuente
vaya al AndroidManifest.xml y reemplace
android: theme = "@ style / AppTheme"
android: theme = "@ android: style / Theme.Holo.Light.DarkActionBar"
fuente
Use getSupportActionBar () en lugar de getActionBar ()
fuente
En mi caso, tenía esto en mi código que no funcionó:
Luego jugué con el orden del código:
¡Y funcionó!
Conclusión: requestWindowFeature debería ser lo primero que llame en el método onCreate.
fuente
Tuve el mismo problema. Se resolvió cambiando el tema de la aplicación en styles.xml
antes de
Después
fuente
Una cosa que quería agregar ya que me encontré con esto, si está tratando de obtenerActionBar () en una actividad que tiene un padre, devolverá nulo. Estoy tratando de refactorizar el código donde mi Actividad está contenida dentro de un Grupo de Actividad, y me tomó unos pocos minutos para ir "oh duh" después de mirar la fuente de cómo se crea una ActionBar en la fuente.
fuente
Lo resuelvo con estos cambios:
android:theme="@android:style/Theme.Holo.Light" >
extends ActionBarActivity
import android.support.v7.app.ActionBarActivity
fuente
Para agregar a las otras respuestas:
Asegúrese de llamar
setActionBar()
osetSupportActionBar()
en suonCreate()
método antes de llamar algetActionBar()
:Defina alguna barra de herramientas en su activity.xml, luego en onCreate ():
fuente
Sé que llego tarde a la fiesta (y nuevo en Android) en esta pregunta, pero encontré la información aquí muy útil y pensé que debería agregar los hallazgos de mis propios esfuerzos para hacer que ActionBar funcione como quería en caso de que vengan otros como yo. en busca de ayuda.
Tengo un widget que es una ventana flotante sin título de ventana. Utilizo un tema de estilo para implementar
android:windowIsFloating
,android:backgroundDimEnabled
yandroid:windowNoTitle
. El widget funcionó bien hasta que quise agregar un botón que llamaba un buscapersonas de fragmentos con varias páginas de fragmentos de lista y utilizaba la Barra de acciones. Se bloquearía en la actividad del localizador con una excepción de puntero nulo. Lo reduje a la ActionBar siendo nula. Siguiendo los hallazgos de personas anteriores que contribuyeron a este hilo, eliminé mi tema del archivo de manifiesto y la Barra de acciones funcionó bien, pero ahora mi ventana ya no flotaba (era pantalla completa) y tenía un título de página que no quería.Investigaciones adicionales me llevaron a la Guía de capacitación de API de estilos y temas que me llevó a una solución. Descubrí que podía agregar mi tema personalizado a actividades individuales en el archivo de manifiesto, mientras que antes lo aplicaba a la aplicación. Todas mis ventanas ahora tienen la apariencia deseada.
fuente
Intenta extender tu clase de actividad desde ActionBarActivity. Esto lo resolvió para mí. Haga algo como lo siguiente:
En mi caso, la clase se extendía solo desde Actividad.
fuente
Esto también puede ayudar a algunas personas.
En mi caso, fue porque no había definido un contexto en el menu.xml
Prueba esto:
En lugar de esto:
fuente
Simplemente verifique la implementación del código fuente haciendo clic en el comando:
requestWindowFeature (Window.FEATURE_ACTION_BAR); Solucioné mi problema cuando vi requestWindowFeature (Window.FEATURE_ACTION_BAR) está fallando; el código es de código abierto úsalo !!
fuente
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
funciona bastante rápido
fuente
En mi caso, simplemente tuve que extender en
AppCompatActivity
lugar deActivity
Clase de ejemplo de actividad completa:
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity
En versiones
fuente