Android开发Android 学习资源酷炫的UI效果

关于Android 4.4后所谓"沉浸式"效

2016-09-24  本文已影响2086人  smart_dev
某音乐播放器

写在前面

原理

那么现在来看看具体实现方式吧

一般页面都是自己定义个类标题栏

实现

从实现效果上,这里大致分为两种

单独给状态栏着色

用标题栏的背景色来填充状态栏

将状态栏设置为半透明的,此时出现的问题是下面的内容会占据了状态栏。
如果我们在activity的根布局添加 android:fitsSystemWindows="true"
那么此时状态栏还是可以看见的,并没有占据。那这个属性的作用就在此了。

此时我们借助状态栏的高度,为下面的内容设置一个padding-top距离(因为状态栏半透明后,
下面的内容会占据原有的状态栏,那么将其设置一个padding的状态栏高度即可)
这样设置后,在这个view的背景的padding下,原有的状态栏高度填充了同样的背景色,那么这样的话就貌似所谓的沉浸式了

这种方式说白了,就是状态栏半透明后,用下面的内容来合适的填充(因为默认半透明会是被占据)
代码如下:

@SuppressLint("InlinedApi")
public static void setImmerseLayout(Activity context, View view) {
    if (context == null || view == null) {
        return;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        Window window = context.getWindow();
        window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        int statusBarHeight = getStatusBarHeight(context.getBaseContext());
        view.setPadding(0, statusBarHeight, 0, 0);
    }
}

/**
 * 用于获取状态栏的高度。 使用Resource对象获取(推荐这种方式)
 *
 * @return 返回状态栏高度的像素值。
 */
public static int getStatusBarHeight(Context context) {
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

后记

关于沉浸式效果的实现方式就啰嗦这么多了.
另外,关于EditText及全屏Dialog等实现沉浸式问题,后期在更新,其实就是那个android:fitsSystemWindows="true"的灵活设置。欢迎交流。

下一篇会实现一个效果:页面顶部是图片,滑动渐变标题栏

滑动渐变2.gif
上一篇 下一篇

猜你喜欢

热点阅读