Я пытаюсь написать приложение, используя подход, состоящий из нескольких фрагментов активности. На некоторых страницах должна быть полупрозрачная панель инструментов, на других - нет.
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, может, ты разместишь фото того, что хочешь?