Android-指定每个片段的主题

时间:2018-09-09 13:15:36

标签: android android-fragments android-toolbar

我尝试使用一种活动多片段方法来编写应用程序。有些页面应该具有半透明的工具栏,而其他页面则没有。

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 :(得分:0)

在启用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);

答案 1 :(得分:0)

在您的片段中

@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;
}

答案 2 :(得分:0)

在您的Java文件中

尝试setTheme()方法

编辑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);