美文网首页Android应用开发连载必备程序员
羊皮书APP(Android版)开发系列(七)Android沉浸

羊皮书APP(Android版)开发系列(七)Android沉浸

作者: JeenWang | 来源:发表于2016-03-20 11:57 被阅读861次

    为了我们的app看起来更漂亮,处理下通知栏是很有必要的,下面是沉浸通知栏的一种实现方式。我们在项目中使用一些通用的方法时,要学会提炼出基础类,供其他类来使用,减少代码重复,增加程序健壮性和可读性。

    • Android沉浸通知栏,有一个开源库SystemBarTint,效果如下:

      这里写图片描述
    • 使用方法:在Activity中添加相关代码,Demo如下:

    public class MatchActionBarActivity extends Activity {   
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_match_actionbar);  
      
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
                setTranslucentStatus(true);  
            }  
      
            SystemBarTintManager tintManager = new SystemBarTintManager(this);  
            tintManager.setStatusBarTintEnabled(true);  
            tintManager.setStatusBarTintResource(R.color.statusbar_bg);//通知栏所需颜色  
      
        }  
      
        @TargetApi(19)   
        private void setTranslucentStatus(boolean on) {  
            Window win = getWindow();  
            WindowManager.LayoutParams winParams = win.getAttributes();  
            final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;  
            if (on) {  
                winParams.flags |= bits;  
            } else {  
                winParams.flags &= ~bits;  
            }  
            win.setAttributes(winParams);  
        }  
      
    }  
    
    • 在APP中使用的时候,我们不要在每个Activity中都重复写这么一段代码,而是要自己定义一个基础的抽象Activity类,用于其他Activity继承,减少代码重复。这里给出我定义的一个基础抽象Activity类BaseActivity.java,代码如下:
    package cn.studyou.parchment.activity;
    
    import android.annotation.TargetApi;
    import android.os.Build;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.Window;
    import android.view.WindowManager;
    
    import com.readystatesoftware.systembartint.SystemBarTintManager;
    
    import cn.studyou.parchment.R;
    
    /**
     * 基本功能:基础Activity类
     * 创建:王杰
     * 创建时间:16/3/9
     * 邮箱:w489657152@gmail.com
     */
    public abstract class BaseActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                setTranslucentStatus(true);
            }
            SystemBarTintManager tintManager = new SystemBarTintManager(this);
            tintManager.setStatusBarTintEnabled(true);
            tintManager.setStatusBarTintResource(R.color.green);//通知栏所需颜色
        }
    
        @TargetApi(19)
        private void setTranslucentStatus(boolean on) {
            Window win = getWindow();
            WindowManager.LayoutParams winParams = win.getAttributes();
            final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
            if (on) {
                winParams.flags |= bits;
            } else {
                winParams.flags &= ~bits;
            }
            win.setAttributes(winParams);
        }
    }
    
    
    • 然后每个Activity中继承BaseActivity即可,如下:
    package cn.studyou.parchment.activity;
    
    import android.os.Bundle;
    
    import cn.studyou.parchment.R;
    
    public class MainActivity extends BaseActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    
    • 最后一步,要在布局文件中添加如下代码:
    android:fitsSystemWindows="true"
    android:clipToPadding="false"
    
    • 添加后的布局文件代码形式如下:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/green"
        android:fitsSystemWindows="true"
        android:clipToPadding="false"
        >
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="登录"
            android:textSize="@dimen/normal"/>
    </RelativeLayout>
    

    相关文章

      网友评论

      • 98a4b0bc93fb:在我的标题栏的背景采用的是图片, 需要状态栏也跟标题栏一样适应图片当背景色。 如果按照此中方案, 将会导致色值不统一, 但我将状态栏隐藏有需要手动的设置标题栏于状态栏的高度。 请问, 有什么好的解决思路吗?
      • 98a4b0bc93fb:通知栏还是状态栏?
        JeenWang:@Bto 怎么叫都可以,就是最顶部那个区域
      • Brucehou:这个开源库支持4.1以下的版本吗
        JeenWang: @Brucehou 可以的
      • JeenWang:谢谢大家1 :smile:
      • yangjianan:支持
      • pengpengli:不错,顶一个

      本文标题:羊皮书APP(Android版)开发系列(七)Android沉浸

      本文链接:https://www.haomeiwen.com/subject/frtklttx.html