Android - укажите тему каждого фрагмента - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь написать приложение, используя подход с несколькими фрагментами действий. Некоторые страницы должны иметь полупрозрачную панель инструментов, но не другие.

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>

Если я устанавливаю тему прозрачной, как мне создать фрагмент с непрозрачной панелью инструментов? Я могу программно расположить значения полей и отступов макета корневого фрагмента и цвет строки состояния.

Это какой-то путь к этой задаче?

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

В вашем фрагменте

@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;
}
0 голосов
/ 09 сентября 2018

попробуйте setTheme() метод в вашем Java-файле

РЕДАКТИРОВАТЬ 1:

Настройка Тема в манифесте обычно используется для Активности.

Если вы хотите установить тему для фрагмента, добавьте следующий код в 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);
0 голосов
/ 09 сентября 2018

Сохранить обычную тему с включенной панелью действий.

Когда вы хотите скрыть / показать панель действий:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...