Android 状态栏、标题栏、屏幕高度、全屏

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50955306 文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货!

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"  

参考:
http://xqjay19910131-yahoo-cn.iteye.com/blog/1435249
http://www.cnblogs.com/hnrainll/archive/2012/06/04/2535120.html
Android全屏,隐藏状态栏和标题栏
Android Activity去除标题栏和状态栏
【Android开发基础】应用界面主题Theme使用方法

关注我的公众号,轻松了解和学习更多技术
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值