宅科技 - 科技,宅出新生活

搜索
热搜: 活动 交友 discuz
如果你还没有论坛的账号,赶快注册吧!
立即注册

合作站点账号登陆

快捷导航
查看: 4740|回复: 0

[布局修改/美化] Android系统定制之SystemUI修改:下拉通知栏尺寸

[复制链接] [提交至百度]

39

主题

43

帖子

8101

积分

超级版主

Rank: 8Rank: 8

积分
8101
发表于 2018-7-10 09:23:12 | 显示全部楼层 |阅读模式
扫码领红包
本帖最后由 ironMan.K 于 2018-7-10 09:31 编辑

本文介绍了DDMS中 Dump View Hierarchy for UI Automator 工具的使用方法,通过该工具找到一些应用的布局,快速定位我们需要修改的源码位置。

1 先看下效果图

修改前,横屏状态的下拉通知栏,距离屏幕左右两边还有段距离。(模拟器中的截图,Android原生的状态)
1.gif

修改后,横屏状态的下拉通知栏,宽度铺满屏幕。(真实设备截图, 修改后刷机效果)
2.gif

2 找到这部分的相关布局。

SystemUI下拉通知栏的布局为super_status_bar.xml
3.png

代码如下

  1. <!-- This is the combined status bar / notification panel window. -->
  2. <com.android.systemui.statusbar.phone.StatusBarWindowView
  3.     xmlns:android="http://schemas.android.com/apk/res/android"
  4.     android:layout_width="match_parent"
  5.     android:layout_height="match_parent"
  6.     android:fitsSystemWindows="true">

  7.     <com.android.systemui.statusbar.BackDropView
  8.             android:id="@+id/backdrop"
  9.             android:layout_width="match_parent"
  10.             android:layout_height="match_parent"
  11.             android:visibility="gone"
  12.             >
  13.         <ImageView android:id="@+id/backdrop_back"
  14.                    android:layout_width="match_parent"
  15.                    android:scaleType="centerCrop"
  16.                    android:layout_height="match_parent" />
  17.         <ImageView android:id="@+id/backdrop_front"
  18.                    android:layout_width="match_parent"
  19.                    android:layout_height="match_parent"
  20.                    android:scaleType="centerCrop"
  21.                    android:visibility="invisible" />
  22.     </com.android.systemui.statusbar.BackDropView>

  23.     <com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_behind"
  24.         android:layout_width="match_parent"
  25.         android:layout_height="match_parent"
  26.         android:importantForAccessibility="no" />

  27.     <include layout="@layout/status_bar"
  28.         android:layout_width="match_parent"
  29.         android:layout_height="@dimen/status_bar_height" />

  30.     <FrameLayout android:id="@+id/brightness_mirror"
  31.                  android:layout_width="@dimen/notification_panel_width"
  32.                  android:layout_height="wrap_content"
  33.                  android:layout_gravity="@integer/notification_panel_layout_gravity"
  34.                  android:paddingLeft="@dimen/notification_side_padding"
  35.                  android:paddingRight="@dimen/notification_side_padding"
  36.                  android:visibility="gone">
  37.         <FrameLayout
  38.                 android:layout_width="match_parent"
  39.                 android:layout_height="match_parent"
  40.                 android:elevation="2dp"
  41.                 android:background="@drawable/brightness_mirror_background">
  42.             <include layout="@layout/quick_settings_brightness_dialog"
  43.                      android:layout_width="match_parent"
  44.                      android:layout_height="wrap_content" />
  45.         </FrameLayout>
  46.     </FrameLayout>

  47.     <com.android.systemui.statusbar.phone.PanelHolder
  48.         android:id="@+id/panel_holder"
  49.         android:layout_width="match_parent"
  50.         android:layout_height="match_parent"
  51.         android:background="@color/transparent" >
  52.         <include layout="@layout/status_bar_expanded"
  53.             android:layout_width="match_parent"
  54.             android:layout_height="match_parent"
  55.             android:visibility="gone" />
  56.     </com.android.systemui.statusbar.phone.PanelHolder>

  57.     <com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_in_front"
  58.         android:layout_width="match_parent"
  59.         android:layout_height="match_parent"
  60.         android:importantForAccessibility="no" />

  61. </com.android.systemui.statusbar.phone.StatusBarWindowView>
复制代码

几个关键的字眼:
| “@layout/status_bar” ————–> 状态栏
| “@+id/brightness_mirror” ——–> 下拉通知栏中调节亮度时,只剩下亮度调节弹出框,位置与下拉通知栏亮度调节位置一样的。
| “@+id/panel_holder”—————>下拉通知栏载体
| “@layout/status_bar_expanded”->下拉通知栏布局

super_status_bar.xml包含了状态栏,下拉通知栏等布局

3 找到下拉通知栏相关布局

通过 DDMS 的 Dump View Hierarchy for UI Automator 工具,我们可以抓取一些布局的ID。
4.png

-3.1 header

通知栏上半部分是 com.android.systemui:id/header,那我们在SystemUI的res中,搜索这个“header” 。
5.png

搜索到layout中带有header的,有status_bar_expanded_header.xml,只有这个布局有这个ID

  1. <com.android.systemui.statusbar.phone.StatusBarHeaderView
  2.     xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:systemui="http://schemas.android.com/apk/res-auto"
  4.     android:id="@+id/header"
  5.     android:layout_width="@dimen/notification_panel_width"
  6.     android:layout_height="@dimen/status_bar_header_height"
  7.     android:layout_gravity="@integer/notification_panel_layout_gravity"
  8.     android:paddingStart="@dimen/notification_side_padding"
  9.     android:paddingEnd="@dimen/notification_side_padding"
  10.     android:baselineAligned="false"
  11.     android:elevation="4dp"
  12.     android:background="@drawable/notification_header_bg"
  13.     android:clickable="true"
  14.     android:focusable="true"
复制代码

如果需要修改header的尺寸,可将

  1. android:layout_width="@dimen/notification_panel_width"
复制代码


修改为

  1. android:layout_width="match_parent"
复制代码


重新编译,这个header的宽度就和屏幕一样了。

-3.2 scroll_view

可上下滑动的快捷开关布局。
6.png

上图所示的布局代码如下

  1. <com.android.systemui.statusbar.phone.ObservableScrollView
  2.      android:id="@+id/scroll_view"
  3.      android:layout_width="@dimen/notification_panel_width"
  4.      android:layout_height="match_parent"  
  5.      android:layout_gravity="@integer/notification_panel_layout_gravity"
  6.      android:scrollbars="none"
  7.      android:overScrollMode="never"
  8.      android:fillViewport="true">
复制代码


将宽度属性改成:

  1. android:layout_width="match_parent"
复制代码

-3.3 notification_stack_scroller

通知列表布局
7.png

上图所示的布局代码如下

  1. <com.android.systemui.statusbar.stack.NotificationStackScrollLayout           
  2. android:id="@+id/notification_stack_scroller"           
  3. android:layout_width="@dimen/notification_panel_width"           
  4. android:layout_height="match_parent"  
  5. android:layout_gravity="@integer/notification_panel_layout_gravity"           
  6. android:layout_marginBottom="@dimen/close_handle_underlap"           
  7. android:importantForAccessibility="no" />
复制代码

宽度属性改成:

  1. android:layout_width="match_parent"
复制代码

4 重新编译,打包ROM

make源码,重新刷机查看效果,可以看到文章开头的gif图所示的效果





上一篇:步步高 vivo y83原厂线刷包解锁救砖,纯净无内置资料,亲测OK
下一篇:获取安卓应用包名和入口 Activity
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

抖音账号
关注抖音
查看在线教程,私信咨询


手机版|小黑屋|网站地图|宅科技 ( 粤ICP备15107403号

GMT+8, 2024-11-23 17:02 , Processed in 0.121990 second(s), 29 queries .

Copyright © 2016 宅科技 | 智能终端极客社区

Powered by Discuz! X3.4 Licensed

快速回复 返回顶部 返回列表