隱藏標(biāo)題欄
先看一下默認(rèn)的情況:
藍(lán)色一行是自定義的導(dǎo)航欄茫死,
黑色的是自帶的 ActionBar ,也就是我們說的標(biāo)題欄。
首先一般都會選擇去掉 ActionBar:
隱藏 actionbar 有很多種方法
- 直接在
AndroidManifest.xml
中,全局的改動 app 的主題
<application>下的
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
這種方法是全局中隱藏了標(biāo)題欄。
- 在 OnCreat() 中加入
注意要加在 setContentView() 的前面
這種方法可以指定 Activity 設(shè)置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隱藏標(biāo)題欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_news);
}
其實(shí)在我的手機(jī)更新系統(tǒng)之前边翁,隱藏了 ActionBar 后,狀態(tài)欄和自定義的導(dǎo)航欄顏色是相匹配的硕盹,不知道什么原因現(xiàn)在默認(rèn)為灰色了符匾。
狀態(tài)欄相融
上面使用的主題雖然隱藏了標(biāo)題欄,但是和我們自定義的導(dǎo)航欄不搭莱睁,
這時候我們可以選擇用自定義的主題(Theme)待讳,來改變狀態(tài)欄:
在 values 下的 style.xml 中添加
<resources>
...
<style name="MTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<!--Android 5.x開始需要把顏色設(shè)置透明,否則導(dǎo)航欄會呈現(xiàn)系統(tǒng)默認(rèn)的淺灰色-->
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
...
</resources>
或者在 onCreate
中:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
,WindowManager.LayoutParams.FLAG_FULLSCREEN);
上面兩行一般不一起設(shè)置仰剿,二選一即可创淡。
第一行設(shè)置導(dǎo)航欄為透明,第二行將導(dǎo)航欄隱藏南吮。
不推薦第二種做法琳彩,如果一個 Activity 中設(shè)置了隱藏導(dǎo)航欄而另一個 Activity 沒有,那兩者切換的時候會不好看。
融合的效果:
狀態(tài)欄和 app 頂部相融合了露乏,如果標(biāo)題欄是一張圖片效果會更好碧浊。
這里還有一個問題,狀態(tài)欄的文字和我們導(dǎo)航欄的文字重疊了瘟仿,
我們可以選擇在布局文件的根元素中添加:
android:fitsSystemWindows="true"
讓布局為狀態(tài)欄留出空間箱锐,就不會出現(xiàn)上面這張被狀態(tài)欄遮擋的情況。
改變狀態(tài)欄的顏色
如果像上面的例子是一樣的純色的標(biāo)題欄劳较,我們可以選擇直接改變狀態(tài)欄的顏色解決問題驹止。
<resources>
<style name="ColorTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">false</item>
<item name="android:statusBarColor">#3EC5FF</item>
</style>
</resources>
或者:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = this.getWindow();
//取消設(shè)置透明狀態(tài)欄,使 ContentView 內(nèi)容不再覆蓋狀態(tài)欄
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//需要設(shè)置這個 flag 才能調(diào)用 setStatusBarColor 來設(shè)置狀態(tài)欄顏色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//設(shè)置狀態(tài)欄顏色
window.setStatusBarColor(getResources().getColor(R.color.blueDark));
}
完全去掉狀態(tài)欄
不顯示時間、電量等信息和文字:
同要可以用修改 Theme 來實(shí)現(xiàn):
<style name="ImageTranslucentTheme">
<!-- 隱藏狀態(tài)欄 -->
<item name="android:windowFullscreen">true</item>
<!-- 隱藏標(biāo)題欄 -->
<item name="android:windowNoTitle">true</item>
</style>
或者在 OnCreat() 中加入观蜗,還是要注意加在 setContentView() 的前面
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 隱藏標(biāo)題欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 隱藏狀態(tài)欄
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_news);
}
如果想讓圖片全屏要注意設(shè)置為:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
//android:scaleType="fitXY"