Android 狀態列、標題欄、螢幕高度、全屏
你也可以檢視我的其他同類文章,也會讓你有一定的收貨!
1.獲取狀態列高度:
decorView是window中的最頂層view,可以從window中獲取到decorView,然後decorView有個getWindowVisibleDisplayFrame()方法可以獲取到程式顯示的區域,包括標題欄,但不包括狀態列。
於是,我們就可以算出狀態列的高度了。
Rect frame = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top ;
2.獲取標題欄高度:
getWindow().findViewById(Window.ID_ANDROID_CONTENT)這個方法獲取到的view就是程式不包括標題欄的部分,然後就可以知道標題欄的高度了。
getTop() 獲得頂部距離父容器的距離
int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
//statusBarHeight是上面所求的狀態列的高度
int titleBarHeight = contentTop - statusBarHeight
3.獲取螢幕寬度和高度
方法 1.
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
方法 2.
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics (dm);//this指當前activity
screenWidth =dm.widthPixels;
screenHeight =dm.heightPixels;
以上兩種方法在螢幕未顯示的時候,還是處於0的狀態,即要在setContentView呼叫之後才有效。
設定為無標題
requestWindowFeature(Window.FEATURE_NO_TITLE);
設定為全屏模式getWindow().setFlags
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
全屏
Android全屏,隱藏狀態列和標題欄,這個功能很簡單,但是在繼承activity和AppCompatActivity區別還是有點區別的,經常用到,所以這裡稍微總結一下。
下面兩種情況的第一種方法,都會看到短暫的狀態列,然後才全屏,而第二種方法是不會有這種情況的
繼承activity時
下面介紹兩種方法:
1、使用程式碼進行隱藏,程式碼如下:
第一種
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//隱藏標題
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); // 隱藏狀態列
setContentView(getLayout());
mUnBinder = ButterKnife.bind(this);
mContext = this;
initInject();
if (mPresenter != null)
mPresenter.attachView(this);
App.getInstance().addActivity(this);
initEventAndData();
}
在這裡要強調一點,設定全屏的倆段程式碼必須在setContentView(R.layout.main) 之前,不然會報錯。
或者自定義標題欄
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);
R.layout.custom_title_1 這個就是你的標題檔案佈局
第二種
使用style進行隱藏
關鍵程式碼如下:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
如果想只是去除標題欄就後面不用加Fullscreen了,另外,如果想要整個應用都去除標題欄和狀態列,就把這句程式碼加到 < application />標籤裡面,如果只是想某個activity起作用,這句程式碼就加到相應的activity.也可用它自定義樣式。
用前者在我們應用執行後,會看到短暫的狀態列,然後才全屏,而第二種方法是不會有這種情況的,所以我建議大家使用第二種
如果繼承的是AppCompatActivity,但是使用了Activity的樣式,就會報下面這個錯誤:
Java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
繼承AppCompatActivity時
下面介紹兩種方法:
第一種
在java中隱藏,程式碼如下:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();//隱藏標題欄
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); // 隱藏狀態列
setContentView(getLayout());
mUnBinder = ButterKnife.bind(this);
mContext = this;
initInject();
if (mPresenter != null)
mPresenter.attachView(this);
App.getInstance().addActivity(this);
initEventAndData();
}
第二種
2、使用style進行隱藏
<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>
<!-- 這個樣式,就是隱藏標題欄和狀態列-->
<style name="AppTheme.NoBar">
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
在manifest.xml中使用該樣式
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jianchi.fsp.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
主題Theme
android:theme="@android:style/Theme.Dialog" 將一個Activity顯示為能話框模式
android:theme="@android:style/Theme.NoTitleBar" 不顯示應用程式標題欄
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不顯示應用程式標題欄,並全屏
android:theme="Theme.Light" 背景為白色
android:theme="Theme.Light.NoTitleBar" 白色背景並無標題欄
android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,無標題欄,全屏
android:theme="Theme.Black" 背景黑色
android:theme="Theme.Black.NoTitleBar" 黑色背景並無標題欄
android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,無標題欄,全屏
android:theme="Theme.Wallpaper" 用系統桌面為應用程式背景
android:theme="Theme.Wallpaper.NoTitleBar" 用系統桌面為應用程式背景,且無標題欄
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系統桌面為應用程式背景,無標題欄,全屏
android:theme="Translucent" 半透明
android:theme="Theme.Translucent.NoTitleBar" 半透明、無標題欄
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 半透明、無標題欄、全屏
android:theme="Theme.Panel"
android:theme="Theme.Light.Panel"
關注我的公眾號,輕鬆瞭解和學習更多技術