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 

Solutions Collecting From Web of "RequestFeature () необходимо вызвать перед добавлением содержимого"

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

Не вызывайте 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 ().

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