Я пытаюсь реализовать пользовательский заголовок:
Вот мой класс Хелпер:
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
android
android-layout
android-activity
Шихан Алам
источник
источник
Ответы:
Ну, просто сделайте то, что говорит вам сообщение об ошибке.
Не звони
setContentView()
раньшеrequestFeature()
.Примечание:
Как сказано в комментарии, для обоих
ActionBarSherlock
иAppCompat
библиотеки, необходимо позвонитьrequestFeature()
перед темsuper.onCreate()
источник
requestFeature()
раньшеsuper.onCreate()
. Ссылка: github.com/JakeWharton/ActionBarSherlock/issues/…requestWindowFeature(Window.FEATURE_NO_TITLE)
чтобы скрыть это, затемsetContentView()
для вашего первого макета, затемrequestWindowFeature(Window.FEATURE_CUSTOM_TITLE)
снова показать строку заголовка. Это было бы послеsetContentView()
второго раза.requestFeature
до этогоsuper.onCreate()
Я знаю, что ему больше года, но звонки
requestFeature()
так и не решили мою проблему. На самом деле я не называю это вообще.Я полагаю, это была проблема с раздуванием взгляда. Несмотря на все мои поиски, я так и не нашел подходящего решения, пока не поигрался с разными методами надувания вида.
AlertDialog.Builder - это простое решение, но оно требует большой работы, если вы используете
onPrepareDialog()
для обновления этого представления.Другой альтернативой является использование AsyncTask для диалогов.
Окончательное решение, которое я использовал ниже:
* Некоторые дополнительные примечания:
источник
content = inflater.inflate(R.layout.custom_view, null);
вероятно, должна бытьcontent = li.inflate(R.layout.custom_view, null);
. Итак,inflater
должен быть заменен наli
.Я расширяю DialogFragment, и приведенный выше ответ не работает. Мне пришлось использовать getDialog (), чтобы добиться удаления заголовка:
источник
Разве ошибка не говорит точно, что не так? Ты звонишь
requestWindowFeature
иsetFeatureInt
после звонкаsetContentView
.Кстати, почему ты звонишь
setContentView
дважды?источник
Для SDK версии 23 и выше выдается то же исключение RuntimeException, если вы используете AppCompatActivity для расширения своей активности. Этого не произойдет, если ваша деятельность напрямую связана с деятельностью.
Это известная проблема в Google, упомянутая в https://code.google.com/p/android/issues/detail?id=186440.
Обходное решение, предусмотренное для этого, заключается в использовании метода supportRequestWindowFeature () вместо использования requestFeature ().
Пожалуйста, проголосуйте, если это решит вашу проблему.
источник
Изменение версии SDK Compile , Target SDK версии для инструментов сборки версии для 24.0.0 в build.gradle если и сталкиваются проблемы в поиске Feature
источник
В моем случае я показал
DialogFragment
вActivity
. В этом фрагменте диалога я написал как в DialogFragment удалить черную рамку :Либо удалить
setStyle(STYLE_NO_FRAME, 0)
вonCreate()
или Chande / удалитьonCreateDialog
. Потому что настройки диалога изменились после того, как диалог был создан.источник
У меня была эта проблема с диалогами, основанными на расширенном DialogFragment, который прекрасно работал на устройствах с API 26, но не работал с API 23. Вышеупомянутые стратегии не работали, но я решил проблему, удалив метод onCreateView (который был добавлен более недавний шаблон Android Studio) из DialogFragment и создания диалога в onCreateDialog.
источник