转载请标明出处: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使用方法
关注我的公众号,轻松了解和学习更多技术