RequestFeature () необходимо вызвать перед добавлением содержимого

Я пытаюсь реализовать пользовательский заголовок:

Вот мой класс Помощника:

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); } } } 

Здесь я называю это onCreate ():

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupUI(); } private void setupUI(){ setContentView(R.layout.main); UIHelper.setupTitleBar(this); } 

Но я получаю ошибку:

 requestFeature() must be called before adding content 

Ну, просто сделайте то, что сообщает вам сообщение об ошибке.

Не вызывайте setContentView() перед requestFeature() .

Заметка:

Как сказано в комментариях, для библиотеки ActionBarSherlock и AppCompat необходимо вызвать requestFeature() перед super.onCreate()

Я знаю, что прошло уже больше года, но вызов requestFeature() никогда не решал мою проблему. На самом деле я не называю это вообще.

Это была проблема с раздуванием взгляда, который я предполагаю. Несмотря на все мои поиски, я не нашел подходящего решения, пока я не играл с различными способами раздувания представления.

AlertDialog.Builder – это простое решение, но требует много работы, если вы используете onPrepareDialog() для обновления этого представления.

Другой альтернативой является использование AsyncTask для диалогов.

Окончательное решение, которое я использовал, приведен ниже:

 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() ); // ... } } 

* Некоторые дополнительные примечания:

  1. Не полагайтесь на скрытие названия. Часто бывает пустое пространство, несмотря на то, что заголовок не задан.
  2. Не пытайтесь создавать свой собственный вид с нижним колонтитулом и средним видом. Заголовок, как указано выше, может быть не полностью скрыт, несмотря на запрос FEATURE_NO_TITLE.
  3. Не используйте стиль содержимого с помощью атрибутов цвета или размера текста. Позвольте диалоговому дескриптору, что, кроме того, вы рискуете помещать черный текст в темно-синий диалог, потому что продавец инвертировал цвета.

Я расширил DialogFragment, и вышеупомянутый ответ didnot работы. Мне пришлось использовать getDialog (), чтобы добиться удаления названия:

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

Разве ошибка точно не говорит вам, что случилось? Вы вызываете requestWindowFeature и setFeatureInt после вызова setContentView .

Кстати, почему вы дважды вызываете setContentView ?

Измените версию SDK компиляции , целевую версию SDK для версии Build Tools до 24.0.0 в файле build.gradle, если проблема с лицом в запросе.

Для SDK версии 23 и выше возникает одно и то же RuntimeException, если вы используете AppCompatActivity для расширения своей активности. Это не произойдет, если ваша деятельность происходит непосредственно из Activity.

Это известная проблема в google, указанная в https://code.google.com/p/android/issues/detail?id=186440.

Для этого требуется использовать метод supportRequestWindowFeature () вместо использования requestFeature ().

Пожалуйста, поддержите, если он решает вашу проблему.