requestFeature () debe llamarse antes de agregar contenido

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 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 

Bueno, haz lo que te dice el mensaje de error.

No llame a setContentView() antes de requestFeature() .

Nota:

Como se dijo en los comentarios, para las bibliotecas ActionBarSherlock y AppCompat , es necesario llamar a requestFeature() antes de super.onCreate()

Sé que tiene más de un año, pero llamar a requestFeature() nunca resolvió mi problema. De hecho, no lo llamo para nada.

Fue un problema con inflar la vista, supongo. A pesar de toda mi búsqueda, 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 cuadros de diálogo.

Una solución final que utilicé es la siguiente:

 public class CustomDialog extends AlertDialog { private View content; public CustomDialog(Context context) { super(context); LayoutInflater li = LayoutInflater.from(context); content = li.inflate(R.layout.custom_view, null); setUpAdditionalStuff(); // do more view cleanup setView(content); } private void setUpAdditionalStuff() { // ... } // Call ((CustomDialog) dialog).prepare() in the onPrepareDialog() method public void prepare() { setTitle(R.string.custom_title); setIcon( getIcon() ); // ... } } 

* Algunas notas adicionales:

  1. No confíes en ocultar el título. A menudo hay un espacio vacío a pesar de que el título no está establecido.
  2. No intente construir su propia Vista con el pie de página del encabezado y la vista central. El encabezado, como se indicó anteriormente, puede no estar completamente oculto a pesar de solicitar FEATURE_NO_TITLE.
  3. No aplique un estilo excesivo a su vista de contenido con atributos de color o tamaño de texto. Deje que el diálogo maneje eso; de lo contrario, corre el riesgo de poner texto negro en un diálogo azul oscuro porque el vendedor invirtió los colores.

Estaba extendiendo un DialogFragment y la respuesta anterior no funcionó. Tuve que usar getDialog () para lograr eliminar el título:

 getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

¿El error no te dice exactamente qué está mal? requestWindowFeature a requestWindowFeature y setFeatureInt después de llamar a setContentView .

Por cierto, ¿por qué llamas a setContentView dos veces?

Para SDK versión 23 y superior, se lanza la misma RuntimeException si está utilizando AppCompatActivity para extender su actividad. No sucederá si su actividad se deriva directamente de la 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 por favor si resuelve tu problema.

Cambie la versión del SDK de comstackción , la versión del SDK de destino a la versión de Herramientas de comstackción a la versión 24.0.0 en build.gradle si se enfrenta problema en la solicitud.