您的位置:一分快三全天精准计划 > 1分快3全天计划官方网站-编程 > 从实现效果上

从实现效果上

2019-09-09 16:51

图片 1某音乐播放器

  • 如图某音乐播放器,那个效果便是所谓的"沉浸式"效果。
  • Android与ios效果互仿早已不是如何稀奇的事,作者猜大概这几个职能来自ios吧,讲真的,那体验认为真不错噢。
  • 有争持说这种功能否称为沉浸式,叫透明状态栏更方便,我也感到这和沉浸式的含义不太同样。
  • 不过我们都如此叫了,那就疑似此呗。
  • 从4.4后系统扩充了晶莹剔透状态栏的特点WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS即便增添上那么些天性后,那么布局中的内容DecorView就能自动填充到状态栏。全部的落实皆以依附那几个特点,就相当于那年状态栏会暗中认可空出来,然后开垦者能够自定义view来填充那些高度的.
  • 兑现的进程中也许还要选用android:fitsSystemWindows="true",那一个天性很主要。其意思:view可以遵照系统窗口(如status bar,软键盘)来调治自个儿的布局,假如值为true,就能调动view的paingding属性来给system windows留出空间....

那正是说现在来看看具体落实格局吗

图片 2一般页面都以投机定义个类标题栏

从贯彻效果与利益上,这里大约分成三种

  • 采取这么些开源库SystemBarTint

     /** * 状态栏颜色设置方法 * @param context * @param color */ public static void smartTintManager(Activity context, int color){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = context.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 创建状态栏的管理实例 SystemBarTintManager tintManager = new SystemBarTintManager; // 激活状态栏设置 tintManager.setStatusBarTintEnabled; tintManager.setStatusBarTintColor; } }
    
    1. 在相应的页面包车型客车根布局中增添android:fitsSystemWindows="true",且根布局中不能够设置总体的大背景观,不然事态栏着色就能被掩饰
    2. 调用上边方法设置具体的颜料(依赖开源库,其中就贰个主导类,能够直接把极其类拷贝到项目中)
  • 这里最首要讲一下切实的达成原理

     private void setupStatusBarView(Context context, ViewGroup decorViewGroup) { mStatusBarTintView = new View; LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getStatusBarHeight; params.gravity = Gravity.TOP; if (mNavBarAvailable && !mConfig.isNavigationAtBottom { params.rightMargin = mConfig.getNavigationBarWidth(); } mStatusBarTintView.setLayoutParams; mStatusBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR); mStatusBarTintView.setVisibility(View.GONE); decorViewGroup.addView(mStatusBarTintView); }
    

    通读这段代码,很轻易看到,通过动态变化三个view,然后这么些view宽是MATCH_PARENT,中度是系统状态栏的冲天;然后为这么些动态变化的view设置贰个背景颜色;最后将以此view加多到decorViewGroup本条view容器中,那再看看这几个view到底是什么人

     /** * Constructor. Call this in the host activity onCreate method after its * content view has been set. You should always create new instances when * the host activity is recreated. * * @param activity The host activity. */ @TargetApi public SystemBarTintManager(Activity activity) { Window win = activity.getWindow(); //获得DecorView根布局容器 ViewGroup decorViewGroup = (ViewGroup) win.getDecorView(); ..... if (mStatusBarAvailable) { // 这个view容器是decorViewGroup setupStatusBarView(activity, decorViewGroup); } if (mNavBarAvailable) { setupNavBarView(activity, decorViewGroup); } }
    

    小心看下边五个自个儿手动增多的注释,可知,这种做法理念正是场馆栏透明后,向根布局decorViewGroup中增加三个和状态栏等惊人的view。至于你让这么些view是怎么着颜色,那就随你心绪了。

将气象栏设置为半晶莹剔透的,此时出现的主题素材是下面的剧情会攻陷了状态栏。借使大家在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;}
  • 对那几个view设置贰个padding_top,而那么些padding的离开刚好是状态栏的莫斯中国科学技术大学学,那么那些view的背景就填充到了情景栏了。

  • 值得注意的是:本条标题栏的中度分明尽管wrap_content,因为一旦是具体的可观,然后在安装个paddingtop的话,那么就能够把一部分标题栏的内容挤出去了,不完全了。

  • 据此普通的做法是将本来的标题栏外面在嵌套二个<FrameLayout />,然后将题目栏背景设置成<FrameLayout />的背景观

     <FrameLayout android: android:layout_width="match_parent" android:background="@color/common_theme_color" android:layout_height="wrap_content">
    

有关沉浸式效果的兑现格局就啰嗦这么多了.别的,关于EditText及全屏Dialog等实现沉浸式难点,早先时期在立异,其实正是可怜android:fitsSystemWindows="true"的灵敏设置。迎接交换。

下一篇会实现多少个意义:页面顶上部分是图片,滑动渐变标题栏

图片 3滑动渐变2.gif

本文由一分快三全天精准计划发布于1分快3全天计划官方网站-编程,转载请注明出处:从实现效果上

关键词: