Изменить тему ListFragment, чтобы быть отличным от активности?
В принципе, я хочу установить свою тему активности в манифесте следующим образом:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
И я хочу, чтобы моя активность загружала ListFragment с темой Theme.Holo.Dialog(определен в моем собственном стиле), однако я не могу просто вызвать setStyle (....) в своем фрагменте, как я мог если это был диалоговый диалог.
Я считаю, что я должен использовать ContextThemeWrapper, но мне трудно понять, какие вызовы мне нужно сделать. До сих пор в моем onCreateView у меня:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LayoutInflater newInflater = inflater.cloneInContext(new ContextThemeWrapper(getActivity(), R.style.DialogThemeSelector));
View inflatedView = newInflater.inflate(R.layout.favourites_print, container, false);
.....
Но это не работает. Заранее спасибо. Питер.
* Редактировать * Стиль публикации:
<style name="DialogThemeSelector" parent="@android:style/Theme.Holo.Dialog"/>
Ответы
Ответ 1
Попробуйте получить новый LayoutInflater
вместо преобразования предоставленного, например:
Context newContext = new ContextThemeWrapper(getActivity(), R.style.DialogThemeSelector);
LayoutInflater newInflater = (LayoutInflater) newContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View inflatedView = newInflater.inflate(R.layout.favourites_print, container, false);
Если это не сработает, я подозреваю, что в вашем style
может быть что-то отсутствует.
Ответ 2
Я делаю это наивно: я определяю макеты элементов списка в XML, используя атрибут style
, и, похоже, он работает. Элементы моего списка не столько касаются того, находятся ли они в фрагменте, либо нет. Я не пробовал стилизовать сам фрагмент, но поскольку элементы списка - единственное, что в нем, их стиль кажется достаточным.
Ответ 3
Возможно, я недопонимаю, но не можете ли вы просто задать тему в манифесте для активности, в которой хранится список?
Изменить: рассмотрев это, мой лучший совет - посмотреть на источник диалоговогофрагмента и попытаться воспроизвести поведение в собственном пользовательском фрагменте.
ИЛИ
Начните свой фрагмент в новой фрагментации =/
Ответ 4
Попробуйте использовать requestWindowFeature (Window.FEATURE_NO_TITLE); вместо android: theme = "@android: style/Theme.Translucent.NoTitleBar"
И поставьте манифест targetSdkVersion = "14" для использования Theme.Holo.