android沉浸式状态栏的实现

简介: <p style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px"> 在style.xml中添加</p> <p style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px"> <br><

在style.xml中添加


[html]  view plain copy
  1. <style name="Theme.Timetodo" parent="@android:style/Theme.Holo.Light">  
  2.   
  3.      <!-- translucent system bars -->  
  4.      <item name="android:windowTranslucentStatus">true</item>  
  5.      <item name="android:windowTranslucentNavigation">true</item>  
  6.  </style>  


其中 android:windowTranslucentStatus表示是否要填充顶部的状态栏区域
android:windowTranslucentNavigation表示是否要填充底部的状态栏区域
这两种样式的目的就是默认让应用的内容放置到系统栏的下边,如果仅仅想扩展背景样式到系统栏下边,则需要设置android:fitsSystemWindows为true,
会增加试图的Pading值让你的布局恢复正常大小,并且可以将背景扩大。


在已经创建的Activity中添加

[java]  view plain copy
  1. package com.example.androidedemo;  
  2.   
  3. import java.lang.reflect.Field;  
  4.   
  5. import android.annotation.SuppressLint;  
  6. import android.app.ActionBar;  
  7. import android.app.ActionBar.LayoutParams;  
  8. import android.app.Activity;  
  9. import android.content.res.Resources;  
  10. import android.graphics.Color;  
  11. import android.graphics.drawable.Drawable;  
  12. import android.os.Bundle;  
  13. import android.util.TypedValue;  
  14. import android.view.Menu;  
  15. import android.view.View;  
  16. import android.view.ViewGroup;  
  17. import android.view.Window;  
  18. import android.view.WindowManager;  
  19. import android.widget.LinearLayout;  
  20. import android.widget.ListView;  
  21. import android.widget.RelativeLayout;  
  22. import android.widget.TextView;  
  23.   
  24. @SuppressLint("NewApi")  
  25. public class MainActivity extends Activity {  
  26.     private RelativeLayout rlLayout;  
  27.   
  28.     @Override  
  29.     protected void onCreate(Bundle savedInstanceState) {  
  30.         super.onCreate(savedInstanceState);  
  31.         setContentView(R.layout.activity_main);  
  32.         //设置ACtionBar  
  33.         ActionBar actionBar = getActionBar();  
  34.         Resources r = getResources();  
  35.         Drawable myDrawable = r.getDrawable(R.drawable.ba);  
  36.         actionBar.setBackgroundDrawable(myDrawable);  
  37.           
  38.         actionBar.setDisplayHomeAsUpEnabled(true);  
  39.         actionBar.setHomeButtonEnabled(true);  
  40.           
  41.         rlLayout = (RelativeLayout) findViewById(R.id.rlayout);  
  42.         ListView listView = (ListView) findViewById(R.id.listView);  
  43.         listView.setAdapter(new MyAdapter(getApplicationContext()));  
  44.           
[java]  view plain copy
  1. <span style="white-space:pre">    </span>//此处判断的目的是让Android系统大于等于4.4的系统才执行沉浸式的功能  
  2.         if (android.os.Build.VERSION.SDK_INT > 18) {  
  3.             Window window = getWindow();  
  4.             window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
  5.             window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
  6.         }  
[java]  view plain copy
  1. <span style="white-space:pre">    </span>//获取到系统通知栏的高度,然后给系统通知栏设置我们需要的颜色。并将其addView到ViewGroup中。  
  2.         // 创建TextView  
  3.          TextView textView = new TextView(this);  
  4.          LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, getStatusBarHeight());  
  5.          textView.setBackgroundColor(Color.parseColor("#3F9FE0"));  
  6.          textView.setLayoutParams(lParams);  
  7.          // 获得根视图并把TextView加进去。  
  8.          ViewGroup view = (ViewGroup) getWindow().getDecorView();  
  9.          view.addView(textView);  
  10.      }  
  11.   
  12.   
  13.     //开启全屏模式  
  14.     @SuppressLint("NewApi")  
  15.     public static void hideSystemUI(View view) {  
  16.         view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE  
  17.                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION  
  18.                 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  
  19.                 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  
  20.                 | View.SYSTEM_UI_FLAG_FULLSCREEN  
  21.                 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  
  22.     }  
  23.   
  24.     //取消全屏模式  
  25.     @SuppressLint("NewApi")  
  26.     public static void showSystemUI(View view) {  
  27.         view.setSystemUiVisibility(  
  28.                 View.SYSTEM_UI_FLAG_LAYOUT_STABLE  
  29.                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION  
  30.                 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);  
  31.     }  
  32.       
  33.  // 获取手机状态栏高度  
  34.     public int getStatusBarHeight() {  
  35.         Class<?> c = null;  
  36.         Object obj = null;  
  37.         Field field = null;  
  38.         int x = 0, statusBarHeight = 0;  
  39.         try {  
  40.             c = Class.forName("com.android.internal.R$dimen");  
  41.             obj = c.newInstance();  
  42.             field = c.getField("status_bar_height");  
  43.             x = Integer.parseInt(field.get(obj).toString());  
  44.             statusBarHeight = getResources().getDimensionPixelSize(x);  
  45.         } catch (Exception e1) {  
  46.             e1.printStackTrace();  
  47.         }  
  48.         return statusBarHeight;  
  49.     }  
  50.   
  51.     // 获取ActionBar的高度  
  52.     public int getActionBarHeight() {  
  53.         TypedValue tv = new TypedValue();  
  54.         int actionBarHeight = 0;  
  55.         if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))// 如果资源是存在的、有效的  
  56.         {  
  57.             actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());  
  58.         }  
  59.         return actionBarHeight;  
  60.     }  
  61. }  



在drawable文件夹中添加

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <gradient  
  5.         android:angle="270"  
  6.         android:endColor="#c8c8c8"  
  7.         android:startColor="#3F9FE0"  
  8.         android:type="linear" />  
  9.   
  10. </shape>    

此代码是给您的导航条设置一个渐变,目的是让导航条和系统通知栏的样式融合看起来更加紧密。


最后在AndroidManifest.xml文件中将Application中的theme更改为上边我们定义的样式

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.example.androidedemo"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="8" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/Theme.Timetodo" >  
  16.         <activity  
  17.             android:name="com.example.androidedemo.MainActivity"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.   
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.     </application>  
  26.   
  27. </manifest>  
目录
相关文章
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
|
Android开发 容器
Android实现面包屑效果,支持Fragment联动
Android实现面包屑效果,支持Fragment联动
|
Android开发
Android实现连线题效果
Android实现连线题效果
|
Android开发
Android实现调用系统相机录像及实现录音
Android实现调用系统相机录像及实现录音
572 0
|
移动开发 JavaScript Android开发
通过howler.js实现在Android下的微信浏览器自动播放音频
通过howler.js实现在Android下的微信浏览器自动播放音频
391 0
通过howler.js实现在Android下的微信浏览器自动播放音频
|
存储 Dart Java
【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用
【Flutter】packages思维以及使用Java添加Android平台特定的实现在Flutter框架里的体现和运用
|
缓存 JSON Java
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
334 1
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
|
数据库 Android开发
android 多级下拉菜单实现教程 greendao使用
android 多级下拉菜单实现教程 greendao使用
168 0
android 多级下拉菜单实现教程 greendao使用
|
XML 开发工具 Android开发
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
264 0
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
|
XML Android开发 数据格式
Android自定义控件(十一)——自定义ViewGroup实现LinearLayout
Android自定义控件(十一)——自定义ViewGroup实现LinearLayout
418 0