Estoy tratando de implementar una barra de título personalizada:
Aquí está mi clase de ayudante:
import android.app.Activity;
import android.view.Window;
public class UIHelper {
public static void setupTitleBar(Activity c) {
final boolean customTitleSupported = c.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
c.setContentView(R.layout.main);
if (customTitleSupported) {
c.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
}
}
}
Aquí es donde lo llamo en onCreate ():
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupUI();
}
private void setupUI(){
setContentView(R.layout.main);
UIHelper.setupTitleBar(this);
}
Pero me sale el error:
requestFeature() must be called before adding content
android
android-layout
android-activity
Sheehan Alam
fuente
fuente
Respuestas:
Bueno, solo haz lo que te dice el mensaje de error.
No llames
setContentView()
antesrequestFeature()
.Nota:
Como se dijo en los comentarios, para ambos
ActionBarSherlock
y laAppCompat
biblioteca, es necesario llamarrequestFeature()
antessuper.onCreate()
fuente
requestFeature()
antessuper.onCreate()
. Referencia: github.com/JakeWharton/ActionBarSherlock/issues/…requestWindowFeature(Window.FEATURE_NO_TITLE)
para ocultarlo, luegosetContentView()
para su primer diseño, luegorequestWindowFeature(Window.FEATURE_CUSTOM_TITLE)
para mostrar la barra de título nuevamente. Eso sería después desetContentView()
la segunda vez.requestFeature
antessuper.onCreate()
Sé que tiene más de un año, pero llamar
requestFeature()
nunca resolvió mi problema. De hecho, no lo llamo en absoluto.Supongo que era un problema al inflar la vista. A pesar de todas mis búsquedas, nunca encontré una solución adecuada hasta que jugué con los diferentes métodos para inflar una vista.
AlertDialog.Builder es la solución fácil pero requiere mucho trabajo si usa el
onPrepareDialog()
para actualizar esa vista.Otra alternativa es aprovechar AsyncTask para los diálogos.
Una solución final que utilicé es la siguiente:
* Algunas notas adicionales:
fuente
content = inflater.inflate(R.layout.custom_view, null);
probablemente debería sercontent = li.inflate(R.layout.custom_view, null);
. Entonces,inflater
tiene que ser reemplazado porli
.Estaba extendiendo un DialogFragment y la respuesta anterior no funcionó. Tuve que usar getDialog () para lograr eliminar el título:
fuente
¿El error no te dice exactamente qué está mal? Estás llamando
requestWindowFeature
ysetFeatureInt
después de llamarsetContentView
.Por cierto, ¿por qué llamas
setContentView
dos veces?fuente
Para SDK versión 23 y superior, se genera la misma RuntimeException si está utilizando AppCompatActivity para extender su actividad. No sucederá si su actividad deriva directamente de Actividad.
Este es un problema conocido en Google como se menciona en https://code.google.com/p/android/issues/detail?id=186440
La solución provista para esto es usar el método supportRequestWindowFeature () en lugar de usar requestFeature ().
Vota a favor si resuelve tu problema.
fuente
Cambie la versión del SDK de compilación , la versión del SDK de destino a la versión de Build Tools a 24.0.0 en build.gradle si tiene problemas en la solicitud.
fuente
En mi caso he mostrado
DialogFragment
enActivity
. En este fragmento de diálogo escribí como en DialogFragment eliminar borde negro :Quite
setStyle(STYLE_NO_FRAME, 0)
enonCreate()
o / quitar chandeonCreateDialog
. Porque la configuración del cuadro de diálogo ha cambiado después de que se ha creado el cuadro de diálogo.fuente
Tuve este problema con Dialogs basado en un DialogFragment extendido que funcionó bien en dispositivos que ejecutan API 26 pero falló con API 23. Las estrategias anteriores no funcionaron, pero resolví el problema eliminando el método onCreateView (que había sido agregado por más reciente plantilla de Android Studio) desde el DialogFragment y creando el diálogo en onCreateDialog.
fuente