精华内容
下载资源
问答
  • **华为手机设置了顶部状态栏透明后,底部是一个EditBox,当我点击这个输入框弹出软键盘的时候键盘的顶部出现了一条黑框,收回键盘的时候那个黑框没有消失,而整个游戏页面就往上顶了,这种情况你们有遇到过吗,怎么解决?...
  • android状态栏一体化(沉浸式状态栏)

    万次阅读 多人点赞 2014-12-01 09:56:22
    在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...

    Android 沉浸式状态栏、状态栏一体化、透明状态栏、仿ios透明状态栏 

    http://blog.csdn.net/jdsjlzx/article/details/50437779

    注:状态栏的字体颜色位白色, 如果状态栏背景为白色,上面的博客已经解决了。


    原文出处:http://niorgai.github.io/2016/03/20/Android-transulcent-status-bar/ 

    最近业务上看到一个设计图挺好看,所以研究了一下透明状态栏,注意不是沉浸式状态栏,在参考了网上的一些资料后,整理出了这篇博客.

    Github Demo 链接: StatusBarCompat

    参考文章:
    1. 由沉浸式状态栏引发的血案

    2. Translucent System Bar 的最佳实践

    3. 该使用 fitsSystemWindows 了!


    首先强调,对于状态栏的处理有两种不同的方式, 这里从Translucent System Bar 的最佳实践直接盗了两张图做对比~.

    全屏( ContentView 可以进入状态栏)非全屏 ( ContentView 与状态栏分离, 状态栏直接着色)

    先定义几个名词:

    1. 全屏模式: 左边图所示.

    2. 着色模式: 右边图所示.

    3. ContentView: activity.findViewById(Window.ID_ANDROID_CONTENT) 获取的 View , 即 setContentView 方法所设置的 View, 实质为 FrameLayout.

    4. ContentParent: ContentView 的 parent , 实质为 LinearLayout.

    5. ChildView: ContentView 的第一个子 View ,即布局文件中的 layout .

    再介绍一下相关的函数:

    1. fitsSystemWindows, 该属性可以设置是否为系统 View 预留出空间, 当设置为 true 时,会预留出状态栏的空间.

    2. ContentView, 实质为 ContentFrameLayout, 但是重写了 dispatchFitSystemWindows 方法, 所以对其设置 fitsSystemWindows 无效.

    3. ContentParent, 实质为 FitWindowsLinearLayout, 里面第一个 View 是 ViewStubCompat, 如果主题没有设置 title ,它就不会 inflate .第二个 View 就是 ContentView.

    5.0以上的处理:

    自5.0引入 Material Design ,状态栏对开发者更加直接,可以直接调用 setStatusBarColor 来设置状态栏的颜色.

    全屏模式:

    Window window = activity.getWindow();
    //设置透明状态栏,这样才能让 ContentView 向上
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
    
    //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    //设置状态栏颜色
    window.setStatusBarColor(statusColor);
    
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    View mChildView = mContentView.getChildAt(0);
    if (mChildView != null) {
        //注意不是设置 ContentView 的 FitsSystemWindows, 而是设置 ContentView 的第一个子 View . 使其不为系统 View 预留空间.
        ViewCompat.setFitsSystemWindows(mChildView, false);
    }

    着色模式:

    Window window = activity.getWindow();
    //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
    
    //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    //设置状态栏颜色
    window.setStatusBarColor(statusColor);
    
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    View mChildView = mContentView.getChildAt(0);
    if (mChildView != null) {
        //注意不是设置 ContentView 的 FitsSystemWindows, 而是设置 ContentView 的第一个子 View . 预留出系统 View 的空间.
        ViewCompat.setFitsSystemWindows(mChildView, true);
    }

    4.4-5.0的处理:

    4.4-5.0因为没有直接的 API 可以调用,需要自己兼容处理,网上的解决方法基本都是创建一下高度为状态栏的 View ,通过设置这个 View 的背景色来模拟状态栏. 这里我尝试了三种方法来兼容处理.

    方法1: 向 ContentView 添加假 View , 设置 ChildView 的 marginTop 属性来模拟 fitsSystemWindows .

    全屏模式:

    Window window = activity.getWindow();
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    
    //首先使 ChildView 不预留空间
    View mChildView = mContentView.getChildAt(0);
    if (mChildView != null) {
        ViewCompat.setFitsSystemWindows(mChildView, false);
    }
    
    int statusBarHeight = getStatusBarHeight(activity);
    //需要设置这个 flag 才能设置状态栏
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //避免多次调用该方法时,多次移除了 View
    if (mChildView != null && mChildView.getLayoutParams() != null && mChildView.getLayoutParams().height == statusBarHeight) {
        //移除假的 View.
        mContentView.removeView(mChildView);
        mChildView = mContentView.getChildAt(0);
    }
    if (mChildView != null) {
        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mChildView.getLayoutParams();
        //清除 ChildView 的 marginTop 属性
        if (lp != null && lp.topMargin >= statusBarHeight) {
            lp.topMargin -= statusBarHeight;
            mChildView.setLayoutParams(lp);
        }
    }

    着色模式:

    Window window = activity.getWindow();
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    
    //First translucent status bar.
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    int statusBarHeight = getStatusBarHeight(activity);
    
    View mChildView = mContentView.getChildAt(0);
    if (mChildView != null) {
        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mChildView.getLayoutParams();
        //如果已经为 ChildView 设置过了 marginTop, 再次调用时直接跳过
        if (lp != null && lp.topMargin < statusBarHeight && lp.height != statusBarHeight) {
            //不预留系统空间
            ViewCompat.setFitsSystemWindows(mChildView, false); 
            lp.topMargin += statusBarHeight;
            mChildView.setLayoutParams(lp);
        }
    }
    
    View statusBarView = mContentView.getChildAt(0);
    if (statusBarView != null && statusBarView.getLayoutParams() != null && statusBarView.getLayoutParams().height == statusBarHeight) {
        //避免重复调用时多次添加 View
        statusBarView.setBackgroundColor(statusColor);
        return;
    }
    statusBarView = new View(activity);
    ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
    statusBarView.setBackgroundColor(statusColor);
    //向 ContentView 中添加假 View
    mContentView.addView(statusBarView, 0, lp);

    方法2: 向 ContentParent 添加假 View ,设置 ContentView 和 ChildView 的 fitsSystemWindows.

    全屏模式:

    Window window = activity.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    ViewGroup mContentParent = (ViewGroup) mContentView.getParent();
    
    View statusBarView = mContentParent.getChildAt(0);
    if (statusBarView != null && statusBarView.getLayoutParams() != null && statusBarView.getLayoutParams().height == getStatusBarHeight(activity)) {
        //移除假的 View
        mContentParent.removeView(statusBarView);
    }
    //ContentView 不预留空间
    if (mContentParent.getChildAt(0) != null) {
        ViewCompat.setFitsSystemWindows(mContentParent.getChildAt(0), false);
    }
    
    //ChildView 不预留空间
    View mChildView = mContentView.getChildAt(0);
    if (mChildView != null) {
        ViewCompat.setFitsSystemWindows(mChildView, false);
    }

    着色模式(会有一条黑线,无法解决):

    Window window = activity.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    ViewGroup mContentParent = (ViewGroup) mContentView.getParent();
    
    View statusBarView = mContentParent.getChildAt(0);
    if (statusBarView != null && statusBarView.getLayoutParams() != null && statusBarView.getLayoutParams().height == getStatusBarHeight(activity)) {
        //避免重复调用时多次添加 View
        statusBarView.setBackgroundColor(statusColor);
        return;
    }
    
    //创建一个假的 View, 并添加到 ContentParent
    statusBarView = new View(activity);
    ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            getStatusBarHeight(activity));
    statusBarView.setBackgroundColor(statusColor);
    mContentParent.addView(statusBarView, 0, lp);
    
    //ChildView 不需要预留系统空间
    View mChildView = mContentView.getChildAt(0);
    if (mChildView != null) {
        ViewCompat.setFitsSystemWindows(mChildView, false);
    }

    方法3:向 ContentView 添加假 View , 设置 ChildView 的 fitsSystemWindows.

    全屏模式:

    Window window = activity.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    View statusBarView = mContentView.getChildAt(0);
    //移除假的 View
    if (statusBarView != null && statusBarView.getLayoutParams() != null && statusBarView.getLayoutParams().height == getStatusBarHeight(activity)) {
        mContentView.removeView(statusBarView);
    }
    //不预留空间
    if (mContentView.getChildAt(0) != null) {
        ViewCompat.setFitsSystemWindows(mContentView.getChildAt(0), false);
    }

    着色模式:

    Window window = activity.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
    ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT);
    int statusBarHeight = getStatusBarHeight(activity);
    
    View mTopView = mContentView.getChildAt(0);
    if (mTopView != null && mTopView.getLayoutParams() != null && mTopView.getLayoutParams().height == statusBarHeight) {
        //避免重复添加 View
        mTopView.setBackgroundColor(statusColor);
        return;
    }
    //使 ChildView 预留空间
    if (mTopView != null) {
        ViewCompat.setFitsSystemWindows(mTopView, true);
    }
    
    //添加假 View
    mTopView = new View(activity);
    ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
    mTopView.setBackgroundColor(statusColor);
    mContentView.addView(mTopView, 0, lp);

    其实全屏模式在三种模式下实现都是一样的,主要是着色模式实现不同.

    对比一下三种着色模式实现的方式:

     方法1方法2方法3
    原理向 ContentView 中添加假 View, 然后利用 ChildView 的 marginTop 属性来模拟 fitsSystemWindows ,主要是通过修改 marginTop 的值可以在全屏模式和着色模式之间切换.因为 ParentView 的实质是一个 LinearLayout , 可以再其顶部添加 View .向 ContentView 中添加假 View, 然后利用ChildView 的 fitsSystemWindows 属性来控制位置, 但是实现缺陷就是不能随时切换两种模式.
    缺陷改变了 ChildView 的 marginTop 值着色模式下,会像由沉浸式状态栏引发的血案中一样出现一条黑线不能在不重启 Activity 的情况下切换模式.
    对应 Github demo 中代码StatusBarCompat类StatusBarCompat1类StatusBarCompat2 类

    总结

    • StatusBarCompat2 主要问题不能切换.

    • StatusBarCompat1 在4.4上会有一条黑线, 如果可以解决我觉得这是最靠谱的解决方法.

    • StatusBarCompat 类算是我最后给出的解决方案吧, 目前使用效果比较完善.推荐使用

      • 用户可以随时在同一个 Activity 中切换不同的状态栏模式.

      • 就算子 View 重写了 dispatchFitSystemWindows 也不会有影响.


    推荐干货集中营Android客户端,实现了沉浸式状态栏,无缝换肤,带3D感觉的侧滑菜单

    主页及侧滑页截图


    gank1.png

    福利及换肤截图


    gank2.png

    下载地址:干货集中营
    github:GanK


    展开全文
  • ①如何 隐藏和显示控件 设置控件lD为1显示/隐藏 隐藏代码 《gone/8》 us(1,"visibility","gone") 显示代码 《visible/0》 us(1,"visibility","visible") 虽隐藏空间保留 《invisible》 注下:控件虽隐藏.但...

    如:隐藏为全屏《执行值或理解改变true》

    uycl(true)

     

    如:显示为非全屏《不执行值或理解未false》

    uycl(false)

     

    如:更变颜色,显示状态栏保留

    uycl("#50c4e5",true)

     

    如:更变颜色,隐藏状态栏空间

    uycl("#50c4e5",false)

     

    注下:常用与设置一体化颜色,以及更变不同的状态栏颜色。

     

    仅系统android 4.4以及以上才有效果,系统android 5.0以及以上效果更佳!

    android 4.4以下的系统,无效果!

     

    如:让用户横屏显示

    ushsp(true)

     

    如:让用户竖屏显示

    ushsp(false)

    展开全文
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...

    1、前言

    在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么给我们的程序加上。来先看一下demo效果图。



    2、关与kitkat


    android 4.4 提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟activity 一样的样式,形成一个完整的主题。


    3、设置方法


    首先要打开activity的透明主题功能,可以把activity的主题设置继承*.TranslucentDecor 主题,然后设置android:windowTranslucentNavigation 或者android:windowTranslucentStatus的主题属性为true,又或者在activity的代码里面开启FLAG_TRANSLUCENT_NAVIGATION 或是 FLAG_TRANSLUCENT_STATUS的window窗口标识。由于透明主题不能在4.4以前的版本里面使用,所以系统样式跟以前没有区别,也就是看不到任何变化,这是一个兼容模式,这个模式可以兼容到api 10.


    激活主题

    [java] view plaincopy

    1. @Override  

    2. protected void onCreate(Bundle savedInstanceState) {  

    3.     super.onCreate(savedInstanceState);  

    4.     setContentView(R.layout.activity_main);  

    5.     // 创建状态栏的管理实例  

    6.     SystemBarTintManager tintManager = new SystemBarTintManager(this);  

    7.     // 激活状态栏设置  

    8.     tintManager.setStatusBarTintEnabled(true);  

    9.     // 激活导航栏设置  

    10.     tintManager.setNavigationBarTintEnabled(true);  

    11. }  


    设置状态栏颜色和图片


    [java] view plaincopy

    1. // 设置一个颜色给系统栏  

    2. tintManager.setTintColor(Color.parseColor("#99000FF"));  

    3. // 设置一个样式背景给导航栏  

    4. tintManager.setNavigationBarTintResource(R.drawable.my_tint);  

    5. // 设置一个状态栏资源  

    6. tintManager.setStatusBarTintDrawable(MyDrawable);  



    4、开源下载地址

    https://github.com/hexiaochun/SystemBarTint


    转载于:https://my.oschina.net/u/2265357/blog/470636

    展开全文
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...

    1、前言

    在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么给我们的程序加上。来先看一下demo效果图。



    2、关与kitkat


    android 4.4 提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟activity 一样的样式,形成一个完整的主题。


    3、设置方法


    首先要打开activity的透明主题功能,可以把activity的主题设置继承*.TranslucentDecor 主题,然后设置android:windowTranslucentNavigation 或者android:windowTranslucentStatus的主题属性为true,又或者在activity的代码里面开启FLAG_TRANSLUCENT_NAVIGATION 或是 FLAG_TRANSLUCENT_STATUS的window窗口标识由于透明主题不能在4.4以前的版本里面使用,所以系统样式跟以前没有区别,也就是看不到任何变化,这是一个兼容模式,这个模式可以兼容到api 10.


    激活主题

    [java] view plaincopy
    1. @Override  
    2. protected void onCreate(Bundle savedInstanceState) {  
    3.     super.onCreate(savedInstanceState);  
    4.     setContentView(R.layout.activity_main);  
    5.     // 创建状态栏的管理实例  
    6.     SystemBarTintManager tintManager = new SystemBarTintManager(this);  
    7.     // 激活状态栏设置  
    8.     tintManager.setStatusBarTintEnabled(true);  
    9.     // 激活导航栏设置  
    10.     tintManager.setNavigationBarTintEnabled(true);  
    11. }  

    设置状态栏颜色和图片


    [java] view plaincopy
    1. // 设置一个颜色给系统栏  
    2. tintManager.setTintColor(Color.parseColor("#99000FF"));  
    3. // 设置一个样式背景给导航栏  
    4. tintManager.setNavigationBarTintResource(R.drawable.my_tint);  
    5. // 设置一个状态栏资源  
    6. tintManager.setStatusBarTintDrawable(MyDrawable);  


    4、开源下载地址

    https://github.com/hexiaochun/SystemBarTint


    状态栏的字体颜色位白色, 如果状态栏背景为白色,这个怎么解决呢?下面这个博客解决了这个问题。

    http://blog.csdn.net/jdsjlzx/article/details/50437779









    ===================


    这个特性是andorid4.4支持的,最少要api19才可以使用。


    开启FLAG_TRANSLUCENT_NAVIGATION 或是 FLAG_TRANSLUCENT_STATUS

    int API_LEVEL =  android.os.Build.VERSION.SDK_INT;
    
    if (API_LEVEL >= 19)
    {
        getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION );     
    }

    1.      //透明状态栏  
    2.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
    3.         //透明导航栏  
    4.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  


    状态栏设置透明后会与下方的view错位~ 就是让下方VIew全屏 覆盖状态栏,解决方法


    首先要在布局文件中加入下面两个属性:

    android:clipToPadding="true"

    android:fitsSystemWindows="true"


    解释一下上面两个布局属性的意思:

    android:clipToPadding 定义布局间是否有间距

    android:fitsSystemWindows="true" 意思就是设置应用布局时是否考虑系统窗口布局;如果为true,将调整系统窗口布局以适应你自定义的布局。比如系统有状态栏,应用也有状态栏时。看你这个布局代码,恰恰是在定义标题栏样式,所以用到这行代码了。


    ===================以上是运用第三方包,可以有更多的灵活性之类的==========================




    =====================以下是一种非常快捷~的方法~=======================================



    代码中设置:

    //透明状态栏  
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
            //透明导航栏  
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 

    可以使用别的办法,主题阿之类的~ 没百度,这样状态栏就会沉浸(和下方View叠加)



    布局中添加:

    android:fitsSystemWindows="true"
        android:clipToPadding="true"  

    将此代码加入到~ 你想状态栏改变颜色相对应的View上,比如VIew1背景色是红色,加入以后状态栏就是红色的~



    布局中设置透明状态栏的方法:


    引用主题

    android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor"

    android:theme="@android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor"

    android:theme="@android:style/Theme.Holo.NoActionBar.TranslucentDecor"


    如果使用自定主题,只需在在values-v19 文件夹下添加以下属性

    <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar" >

        <!-- API 19 theme customizations can go here. -->

        <item name="android:windowTranslucentStatus">true</item>

        <item name="android:windowTranslucentNavigation">true</item>

    </style>

    <span style="font-family: 'Comic Sans MS';"><span style="white-space:pre">		</span>values-v19代表在API 19+的设备上,用该目录下的styles.xml代替res/values/styles.xml</span>






    以下是原帖内容:




    这个特性是andorid4.4支持的,最少要api19才可以使用。下面介绍一下使用的方法,非常得简单:

    [java] view plain copy
    1. public class MainActivity extends Activity {  
    2.   
    3.     @Override  
    4.     protected void onCreate(Bundle savedInstanceState) {  
    5.         super.onCreate(savedInstanceState);  
    6.         setContentView(R.layout.activity_main);  
    7.   
    8.         //透明状态栏  
    9.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
    10.         //透明导航栏  
    11.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
    12.   
    13.     }  
    14.   
    15.   
    16. }  


    [java] view plain copy
    1. //透明状态栏  
    2. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
    3. //透明导航栏  
    4. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  

    只要加入这两行代码,就可以实现沉浸式通知栏了。效果如图:



    给大家看看这个界面的布局:

    [html] view plain copy
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:background="#ffffff"  
    6.     android:orientation="vertical"  
    7.     tools:context=".MainActivity">  
    8.   
    9.   
    10.     <TextView  
    11.   
    12.         android:layout_width="match_parent"  
    13.         android:layout_height="100dp"  
    14.         android:background="#009959" />  
    15.   
    16.   
    17.     <Button  
    18.         android:layout_width="100dp"  
    19.         android:layout_height="50dp"  
    20.         android:background="#ff669d"/>  
    21.   
    22. </LinearLayout>  

    是一个垂直的流布局,但这样,其实还是有问题的,我在textView里面加一些文字,就是绿色的那一块,大家看一下效果:


    大家看到了吧,文字和状态栏重叠在一起了,这肯定是不行的,此时需要添加下面的代码:


    [html] view plain copy
    1. android:fitsSystemWindows="true"  
    2. android:clipToPadding="true"  

    [html] view plain copy
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.       
    6.     android:fitsSystemWindows="true"  
    7.     android:clipToPadding="true"  
    8.   
    9.     android:background="#ffffff"  
    10.     android:orientation="vertical"  
    11.     tools:context=".MainActivity">  
    12.   
    13.   
    14.   
    15.     <TextView  
    16.         android:layout_width="match_parent"  
    17.         android:layout_height="100dp"  
    18.         android:background="#009959" />  
    19.   
    20.   
    21.     <Button  
    22.         android:layout_width="100dp"  
    23.         android:layout_height="50dp"  
    24.         android:background="#ff669d"/>  
    25.   
    26. </LinearLayout>  

    大家看红色的那部分,加入那两行以后,界面仍然会是沉浸式的,但状态栏那部分,就不会再重叠了,像加了padding一样,如下图:


    大家看图,绿色的textView和红色的一个button都被下移了,状态栏是白色的,是背景linearLayout的颜色。很明显,这也不是我们想要的,我们希望状态栏和我们放在顶部的控件是同一个颜色,同时,控件内容也不和状态栏重复,其实,只要把那两行代码放到我们顶部的控件就可以了。代码如下:


    [html] view plain copy
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:background="#ffffff"  
    6.     android:orientation="vertical"  
    7.     tools:context=".MainActivity">  
    8.   
    9.   
    10.   
    11.     <TextView  
    12.         android:fitsSystemWindows="true"  
    13.         android:clipToPadding="true"  
    14.   
    15.         android:layout_width="match_parent"  
    16.         android:layout_height="100dp"  
    17.         android:background="#009959"  
    18.         android:text="你好,请问你有男朋友吗"/>  
    19.   
    20.   
    21.     <Button  
    22.         android:layout_width="100dp"  
    23.         android:layout_height="50dp"  
    24.         android:background="#ff669d"/>  
    25.   
    26. </LinearLayout>  
    就是那两行红色的代码,放在绿色的textView上,这样,就会是下面的效果:

    这就是我们想要的了。


    这个方法只有在andorid4.4中才能够使用,以下的不能使用,兼容性问题解决方案(自己还没查看~)~~~



    犹豫这个特性是andorid4.4支持的,最少要api19才可以使用,那么低于4.4的怎么办呢?这里我们还是通过自定义标题栏的方式解决。

    首先我们来看怎么实现文章开头特产惠界面的效果。

    本应用是FragmentAcitity+Framgment实现,故主界面是四个fragment组成。
    MainUIAcitivy中onCreate方法:
    [java] view plain copy
    1. @Override  
    2.     public void onCreate(Bundle savedInstanceState) {  
    3.         super.onCreate(savedInstanceState);  
    4.         setContentView(R.layout.activity_main);  
    5.   
    6.         //透明状态栏  
    7.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
    8.             Window window = getWindow();  
    9.             // Translucent status bar  
    10.             window.setFlags(  
    11.                     WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,  
    12.                     WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
    13.         }  
    14.   
    15.         // 强制更新  
    16.         UmengUpdateAgent.setDialogListener(new UmengDialogButtonListener() {  
    17.   
    18.             @Override  
    19.             public void onClick(int status) {  
    20.                 switch (status) {  
    21.                     case UpdateStatus.Update:  
    22.                         break;  
    23.                     default:  
    24.                         // close the app  
    25.                         AppToast.showShortText(MainUIActivity.this,  
    26.                                 "非常抱歉,您需要更新应用才能继续使用");  
    27.                         MainUIActivity.this.finish();  
    28.                 }  
    29.             }  
    30.         });  
    31.     }  

    首页(特产惠)布局的加载如下代码,大家可以看到根据当前api是否大于4.4,加载不同的布局,归根到底就是标题栏的不同。
    [java] view plain copy
    1. @Override  
    2.    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
    3.        View view = inflater.inflate(R.layout.fragment_home, container, false);  
    4.        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
    5.            view = inflater.inflate(R.layout.fragment_home_v19, container, false);  
    6.        }  
    7.        return view;  
    8.    }  

    fragment_home.xml
    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:background="@color/app_bg"  
    6.     android:orientation="vertical"  
    7.     >  
    8.   
    9.         <!--其他布局-->  
    10.   
    11.     <RelativeLayout  
    12.         android:id="@+id/index_title_bar"  
    13.         android:layout_alignParentTop="true"  
    14.         style="@style/title_bar_style_home"  
    15.         android:fitsSystemWindows="true"  
    16.         android:gravity="center"  
    17.         >  
    18.   
    19.         <TextView  
    20.             android:id="@+id/current_city_text"  
    21.             android:layout_width="wrap_content"  
    22.             android:layout_height="wrap_content"  
    23.             android:layout_alignParentLeft="true"  
    24.             android:layout_centerVertical="true"  
    25.             android:layout_marginLeft="10dp"  
    26.             android:drawableTop="@drawable/ic_location"  
    27.             android:drawablePadding="2dp"  
    28.             android:text="北京"  
    29.             android:textColor="#fff"  
    30.             android:textSize="10sp" />  
    31.   
    32.         <TextView  
    33.             android:id="@+id/tv_title"  
    34.             android:layout_centerVertical="true"  
    35.             android:layout_width="match_parent"  
    36.             android:layout_height="33dp"  
    37.             android:gravity="center_vertical"  
    38.             android:layout_weight="10"  
    39.             android:background="@drawable/shape_edit_corners_bg"  
    40.             android:hint="请输入商品名称"  
    41.             android:imeOptions="actionSearch"  
    42.             android:singleLine="true"  
    43.             android:textColor="@color/black_text"  
    44.             android:textColorHint="#ffb6b6b6"  
    45.             android:textSize="14sp"  
    46.             android:maxLength="10"  
    47.             android:paddingLeft="5dp"  
    48.             android:paddingRight="3dp"  
    49.             android:drawableLeft="@drawable/ic_search"  
    50.             android:drawableRight="@drawable/bg_btn_voice"  
    51.             android:layout_toLeftOf="@+id/image_right"  
    52.             android:layout_toRightOf="@+id/current_city_text"  
    53.             android:layout_marginLeft="10dp"  
    54.             android:layout_marginRight="10dp"/>  
    55.   
    56.         <TextView  
    57.             android:id="@+id/image_right"  
    58.             android:layout_width="wrap_content"  
    59.             android:layout_height="wrap_content"  
    60.             android:layout_alignParentRight="true"  
    61.             android:layout_centerVertical="true"  
    62.             android:layout_marginRight="10dp"  
    63.             android:drawableTop="@drawable/ic_category"  
    64.             android:drawablePadding="2dp"  
    65.             android:text="分类"  
    66.             android:textColor="#fff"  
    67.             android:textSize="10sp" />  
    68.   
    69.     </RelativeLayout>  
    70. </RelativeLayout>  

    fragment_home_v19.xml
    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:background="@color/app_bg"  
    6.     android:orientation="vertical"  
    7.     >  
    8.   
    9.         <!-- 其他布局 -->  
    10.   
    11.     <RelativeLayout  
    12.         android:id="@+id/index_title_bar"  
    13.         android:layout_alignParentTop="true"  
    14.         style="@style/title_bar_style_home_v19"  
    15.         android:fitsSystemWindows="true"  
    16.         android:gravity="center"  
    17.         android:paddingTop="@dimen/title_bar_padding_top"  
    18.         >  
    19.   
    20.         <TextView  
    21.             android:id="@+id/current_city_text"  
    22.             android:layout_width="wrap_content"  
    23.             android:layout_height="wrap_content"  
    24.             android:layout_alignParentLeft="true"  
    25.             android:layout_centerVertical="true"  
    26.             android:layout_marginLeft="10dp"  
    27.             android:drawableTop="@drawable/ic_location"  
    28.             android:drawablePadding="2dp"  
    29.             android:text="北京"  
    30.             android:textColor="#fff"  
    31.             android:textSize="10sp" />  
    32.   
    33.         <TextView  
    34.             android:id="@+id/tv_title"  
    35.             android:layout_centerVertical="true"  
    36.             android:layout_width="match_parent"  
    37.             android:layout_height="33dp"  
    38.             android:gravity="center_vertical"  
    39.             android:layout_weight="10"  
    40.             android:background="@drawable/shape_edit_corners_bg"  
    41.             android:hint="请输入商品名称"  
    42.             android:imeOptions="actionSearch"  
    43.             android:singleLine="true"  
    44.             android:textColor="@color/black_text"  
    45.             android:textColorHint="#ffb6b6b6"  
    46.             android:textSize="14sp"  
    47.             android:maxLength="10"  
    48.             android:paddingLeft="5dp"  
    49.             android:paddingRight="3dp"  
    50.             android:drawableLeft="@drawable/ic_search"  
    51.             android:drawableRight="@drawable/bg_btn_voice"  
    52.             android:layout_toLeftOf="@+id/image_right"  
    53.             android:layout_toRightOf="@+id/current_city_text"  
    54.             android:layout_marginLeft="10dp"  
    55.             android:layout_marginRight="10dp"/>  
    56.   
    57.         <TextView  
    58.             android:id="@+id/image_right"  
    59.             android:layout_width="wrap_content"  
    60.             android:layout_height="wrap_content"  
    61.             android:layout_alignParentRight="true"  
    62.             android:layout_centerVertical="true"  
    63.             android:layout_marginRight="10dp"  
    64.             android:drawableTop="@drawable/ic_category"  
    65.             android:drawablePadding="2dp"  
    66.             android:text="分类"  
    67.             android:textColor="#fff"  
    68.             android:textSize="10sp" />  
    69.   
    70.     </RelativeLayout>  
    71. </RelativeLayout>  

    
    
    style.xml
    [html] view plain copy
    1. <style name="title_bar_style_home"><!-- 首页用 -->  
    2.         <item name="android:background">#ffc6003b</item>  
    3.         <item name="android:paddingLeft">0.0dip</item>  
    4.         <item name="android:paddingRight">0.0dip</item>  
    5.         <item name="android:layout_width">fill_parent</item>  
    6.         <item name="android:layout_height">48dp</item>  
    7.     </style>  
    8.     <style name="title_bar_style_home_v19"><!-- 首页用v19 -->  
    9.         <item name="android:background">#ffc6003b</item>  
    10.         <item name="android:paddingLeft">0.0dip</item>  
    11.         <item name="android:paddingRight">0.0dip</item>  
    12.         <item name="android:layout_width">fill_parent</item>  
    13.         <item name="android:layout_height">65dp</item>  
    14.     </style>  
    values/dimens.xml
    <dimen name="title_bar_padding_top">0dp</dimen>
    values-v19/dimens.xml
    <dimen name="title_bar_padding_top">20dp</dimen>

    首页(特产惠)的关键代码就这么多,下面我们来重点看第二个fragment(生活+)。

    跟首页不同的是,生活+界面的标题栏是白色的,如果实现侵色,状态栏也是白色的,这样状态栏的白色字就看不见了,下面给出解决方法。

    解决的办法还是自定义标题栏。

    原理:自定义标题栏(包含状态栏),背景为黑色,也就是状态栏的颜色。高度为68dp,然后设置paddingTop=20dp,这个20dp就是状态栏的高度。剩下的48dp就是我们真正的标题栏。

    首先还是根据当前api是否大于4.4,加载不同的布局,归根到底就是状态栏的不同。
    [java] view plain copy
    1. @Override  
    2.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
    3.             Bundle savedInstanceState) {  
    4.         View view = inflater.inflate(R.layout.fragment_life, container, false);  
    5.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
    6.             view = inflater.inflate(R.layout.fragment_life_v19, container, false);  
    7.         }  
    8.           
    9.         return view;  
    10.     }  

    fragment_life.xml
    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:id="@+id/root_layout"  
    4.     android:layout_width="match_parent"  
    5.     android:layout_height="match_parent"  
    6.     android:orientation="vertical">  
    7.   
    8.     <include layout="@layout/title_bar_main" />  
    9.   
    10.     <!-- 其他布局 -->  
    11. </LinearLayout>  


    
    
    
    title_bar_main.xml
    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:id="@+id/main_title_bar"  
    4.     style="@style/title_bar_style_main"  
    5.     android:fitsSystemWindows="true"  
    6.     >  
    7.   
    8.     <RelativeLayout  
    9.         android:layout_width="match_parent"  
    10.         android:layout_height="match_parent"  
    11.         android:background="#FFFEFEFE">  
    12.   
    13.         <TextView  
    14.             android:id="@+id/title_text"  
    15.             style="@style/title_text_style"  
    16.             android:layout_width="wrap_content"  
    17.             android:layout_height="wrap_content"  
    18.             android:layout_centerInParent="true"  
    19.             android:ellipsize="end"  
    20.             android:singleLine="true" />  
    21.   
    22.         <ImageView  
    23.             android:id="@+id/right_img"  
    24.             android:layout_width="wrap_content"  
    25.             android:layout_height="wrap_content"  
    26.             android:layout_alignParentRight="true"  
    27.             android:layout_centerVertical="true"  
    28.             android:contentDescription="@null"  
    29.             android:paddingLeft="15dp"  
    30.             android:paddingRight="15dp"  
    31.             android:src="@drawable/ic_notice"  
    32.             android:visibility="gone"/>  
    33.   
    34.   
    35.     </RelativeLayout>  
    36. </LinearLayout>  

    fragment_life_v19.xml
    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:id="@+id/root_layout"  
    4.     android:layout_width="match_parent"  
    5.     android:layout_height="match_parent"  
    6.     android:orientation="vertical">  
    7.   
    8.     <include layout="@layout/title_bar_main_v19" />  
    9.   
    10.     <!-- 其他布局 -->  
    11.   
    12.       
    13.   
    14. </LinearLayout>  

    title_bar_main_v19.xml
    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:id="@+id/main_title_bar"  
    4.     style="@style/title_bar_style_main_19"  
    5.     android:fitsSystemWindows="true"  
    6.     android:paddingTop="@dimen/title_bar_padding_top">  
    7.   
    8.     <RelativeLayout  
    9.         android:layout_width="match_parent"  
    10.         android:layout_height="match_parent"  
    11.         android:background="#FFFEFEFE">  
    12.   
    13.         <TextView  
    14.             android:id="@+id/title_text"  
    15.             style="@style/title_text_style"  
    16.             android:layout_width="wrap_content"  
    17.             android:layout_height="wrap_content"  
    18.             android:layout_centerInParent="true"  
    19.             android:ellipsize="end"  
    20.             android:singleLine="true" />  
    21.   
    22.         <ImageView  
    23.             android:id="@+id/right_img"  
    24.             android:layout_width="wrap_content"  
    25.             android:layout_height="wrap_content"  
    26.             android:layout_alignParentRight="true"  
    27.             android:layout_centerVertical="true"  
    28.             android:contentDescription="@null"  
    29.             android:paddingLeft="15dp"  
    30.             android:paddingRight="15dp"  
    31.             android:src="@drawable/ic_notice"  
    32.             android:visibility="gone"/>  
    33.   
    34.   
    35.     </RelativeLayout>  
    36. </LinearLayout>  

    style.xml
    [html] view plain copy
    1. <style name="title_bar_style_main">  
    2.         <item name="android:background">#FFFEFEFE</item>  
    3.         <item name="android:paddingLeft">0.0dip</item>  
    4.         <item name="android:paddingRight">0.0dip</item>  
    5.         <item name="android:layout_width">fill_parent</item>  
    6.         <item name="android:layout_height">48dp</item>  
    7.         <item name="android:gravity">center_vertical</item>  
    8.     </style>  
    9.     <style name="title_bar_style_main_19">  
    10.         <item name="android:background">@android:color/black</item>  
    11.         <item name="android:paddingLeft">0.0dip</item>  
    12.         <item name="android:paddingRight">0.0dip</item>  
    13.         <item name="android:layout_width">fill_parent</item>  
    14.         <item name="android:layout_height">68dp</item>  
    15.         <item name="android:gravity">center_vertical</item>  
    16.     </style>  











    展开全文
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • 最近做了一个页面,做好后却发现状态栏的图标字体什么的都没有了,很郁闷,查了一下才知道安卓状态栏默认是白色的,所以把他的背景设置为与白色相近的颜色自然就看不见。 怎么变深色呢,查了好多,终于成功了,但...
  • 于android kitkat 有一个新功能可以设置背景的手机状态栏,让手机风的整个界面格是一致的,它看起来非常酷,在今年的google i/o向上android l这样的风格。来如今看我们怎么加上这个酷黑狂拽掉渣天的功能怎么给我们的...
  • 在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • sketchup阴影绘制失败,什么原因怎么设计成手机标题,尖头可以返回CSS布局HTML小编今天和大家分享代码刚开始自学 想问问百度网盘的标题栏怎么用代码写网盘分享找资源更多qq790269286qq790269286超级会员尊享15项特权...
  • 最近做了一款微信小程序,各方面感觉都很完美(萝卜一直这么自信),今天设计总监告诉我你的小程序怎么返回顶部不好使呀,吓得我赶紧拿手机试试,没毛病啊,我手机(苦逼的安卓机)上点两下就回去了呀,遂去找他理论...
  • 小米手机怎么压缩文件?随着压缩技术的高速发展,手机上也会自带文件...在最下方的状态栏中选择“更多” 在新弹出的窗口页面中就可以看到压缩的功能,点击他 设置好压缩包的名字之后点击下方的确定按钮,等待一段时间
  • 5g手机怎么开5g网络

    2021-03-30 10:44:50
    以华为手机为例,打开【设置】-【移动网络】,点击【启用5G】开关,状态栏上的信号图标就会出现一个5G图标。具体介绍如下: 1、首先打开手机设置】,找到并点击【移动网络】,接着打开【启用5G】的按钮,状态栏上...
  • 据说部分网友oppo手机升级后会出现耗电多,系统运行不稳定,上不了4G的情况...依次打开-设置-通知与状态栏-通知管理-找到“设置”,点开后关闭允许项。然后返回,设置图标右上角的红1已经被关闭了。终止下载,并删除...
  • 在学Android多媒体Notification时,怎么修改代码,手机端就是不弹通知,翻看Log发现如标题错误,经在网上查资料,发现是手机设置问题,打开手机设置,通知与状态栏,通知管理,找到对应的应用,允许该应用谈通知即可...
  • 安卓开发——系统UI

    2021-05-15 22:52:14
    现在安卓主流的屏下摄像头,或者水滴屏的手机 为什么设置了全屏之后状态栏就变黑了, 怎么样才能设置成沉浸式的全屏模式呢</p>
  • Android8.1 SystemUI QSCustomizer布局调整

    千次阅读 2018-06-05 11:16:38
    SystemUI QSCustomizer...QSCustomizer就是下拉状态栏中快速设置按钮,支持手机用户自己修改。 这里用了RecyclerView,RecyclerView我没怎么用过,所以很多方法都不知道,碰到了困难还是求助同事才解决 ./src/co...
  • android刘海屏适配

    千次阅读 2018-10-29 15:58:25
    如果状态栏正常展示,则不需要适配刘海屏 问:没有安卓9.0的手机怎么验证和调试应用刘海屏? 答:使用云真机或者创建Androidstudio模拟器进行调试 问:小老弟,安卓9.0的模拟器上没看到刘海屏怎么回事? ...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

手机状态栏怎么设置