在项目过程中,根据需求要对默认theme的ActionBar进行更改,由DarkActionBar更改为NoActionBar。方法总结如下:
(1)在Android Studio中新建一个项目后,我们可以在配置文件AndroidManifest.xml中看到系统或自动生成App的主题,即对应
android:theme="@style/AppTheme"
(2)修改ActionBar就是从AndroidManifest配置文件入手,将鼠标光标移动至AppTheme字符处,然后使用快捷键Ctrl B查看其描述(即跳转到res/values/styles.xml文件):
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
只要将上述代码中默认的DarkActionBar更改为NoActionBar,就成功将theme更改为了NoActionBar.
===============================华丽丽的分割线
按上述方法设置完NoActionBar后,还需要把最上面的状态栏也隐藏,因为我在项目中使用的板子上的系统设置已经写好了这个状态栏。直接上图看隐藏前后的效果:
图一是在板子上运行后的效果,状态栏还未隐藏,所以上方显示是绿色的部分。图二是进行了状态栏隐藏操作后在AndroidStudio模拟器上运行后的效果,上方的绿色部分已经被隐藏,在板子上运行时也会使用系统设置已经写好的状态栏。
图片直观的展示状态栏隐藏前后的显示效果后,总结一下我使用的最上方的状态栏隐藏方法:
(1)写一个工具类StatusBarUtil类。
/**
* StatusBar 工具类
*/
public class StatusBarUtil {
/**
* 设置状态栏全透明
*
* @param activity 需要设置的activity
*/
public static void setTransparent(Activity activity) {
transparentStatusBar(activity);
setRootView(activity);
}
/**
* 使状态栏透明
*/
private static void transparentStatusBar(Activity activity) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//需要设置这个flag contentView才能延伸到状态栏
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//状态栏覆盖在contentView上面,设置透明使contentView的背景透出来
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
}
/**
* 设置根布局参数
*/
private static void setRootView(Activity activity) {
ViewGroup parent = activity.findViewById(android.R.id.content);
for (int i = 0, count = parent.getChildCount(); i < count; i++) {
View childView = parent.getChildAt(i);
if (childView instanceof ViewGroup) {
childView.setFitsSystemWindows(true);
((ViewGroup) childView).setClipToPadding(true);
}
}
}
}
(2)在Activity的onCreate()方法中调用写好的StatusBarUtil类的setTransparent方法。
即在对应Activity的OnCreate()方法中加入下面这行代码:
StatusBarUtil.setTransparent(this);