我尝试使用一种活动多片段方法来编写应用程序。有些页面应该具有半透明的工具栏,而其他页面则没有。
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>
如果将主题设置为透明,如何使用不透明的工具栏创建片段?我可以以编程方式排列片段根布局和状态栏颜色的边距和填充值。
这与这项任务有关吗?
答案 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)
尝试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);