Я пытаюсь написать приложение, используя подход, состоящий из нескольких фрагментов активности. На некоторых страницах должна быть полупрозрачная панель инструментов, на других - нет.
new MyFragment(isTranslucentToolbar)
Но свойство темы принадлежит приложению.
<application
android:allowBackup = "true"
android:icon = "@mipmap/ic_launcher"
android:supportsRtl = "true"
android:theme = "@style/AppTheme">
Если я установлю это свойство, как показано ниже, я не смогу изменить тему фрагмента.
<style name = "AppTheme" parent = "@style/Theme.AppCompat.Light">
<item name = "windowActionBar">false</item>
<item name = "windowNoTitle">true</item>
<item name = "android:windowDisablePreview">true</item>
</style>
<style name = "AppTheme.Transparent" parent = "AppTheme">
<item name = "windowActionBarOverlay">true</item>
<item name = "android:windowTranslucentStatus">true</item>
</style>
Если я установлю тему как прозрачную, как мне создать фрагмент с непрозрачной панелью инструментов? Я могу программно настроить значения полей и отступов корневого макета фрагмента и цвета строки состояния.
Это какой-нибудь способ решения этой задачи?
Сохраните обычную тему с включенным ActionBar.
Если вы хотите скрыть / показать ActionBar:
activity.getSupportActionBar().hide(); //for AppCompatActivity
activity.getActionBar().hide(); //for Activity
activity.getSupportActionBar.show(); //for AppCompatActivity
activity.getActionBar().show(); //for Activity
Если вы хотите изменить прозрачность строки состояния:
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
В вашем фрагменте
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getContext().getTheme().applyStyle(R.style.AppTheme_Transparent, true);
View view = inflater.inflate(R.layout.Your_fragment_layout, container, false);
return view;
}
@ ʍѳђ ઽ ૯ ท не влияет на строку состояния
Я бы просто определил панель приложений в каждом фрагменте и использовал тему без панели действий .NoActionBar. Тогда оболочка контекста также повлияет на панель приложений. Конечно, он добавляет дополнительный код, но сохраняет тему от фрагмента отдельно от темы активности.
попробуйте метод setTheme() в своем java файле
РЕДАКТИРОВАТЬ 1:
Настройка темы в манифесте обычно используется для Activity.
Если вы хотите установить тему для фрагмента, добавьте следующий код в onCreateView () фрагмента:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// create ContextThemeWrapper from the original Activity Context with the custom theme
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.yourCustomTheme);
// clone the inflater using the ContextThemeWrapper
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);
// inflate the layout using the cloned inflater, not default inflater
return localInflater.inflate(R.layout.yourLayout, container, false);
}
Также попробуйте этот сегмент кода, если описанное выше не работает.
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
Toolbar toolbar = view.findViewById(R.id.toolbar); toolbar.setTitle("Fragment toolbar"); ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); getContext().getTheme().applyStyle(R.style.MyTranparentTheme, true); ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); ((AppCompatActivity)getActivity()).getSupportActionBar().setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(getContext(), R.color.translucentColor))); setTheme или applyTheme не работают для прозрачной строки состояния.
@ us2956 Я отредактировал ответ. Проверить, работает ли код
@ us2956, может, ты разместишь фото того, что хочешь?