精华内容
下载资源
问答
  • androidSystemUI 原生SystemUI基于Android7.1源码,可以在Android Studio上运行,当前问题是要系统签名才可以替换,直接push是没有作用的,不过阅读源码,查看布局很方便 有些会报错,是没有关系,不要在Android ...
  • 先看对比图 非沉浸式通知栏 ...https://github.com/D-clock/AndroidSystemUiTraining/blob/master/note/00_AndroidSystemUI%EF%BC%9ATranslucentBar%E7%89%B9%E6%80%A7%E7%9A%84%E4%BD%BF%E7%94%A8.md

    先看对比图

    非沉浸式通知栏
    这里写图片描述
    Android 4.4开始,引入了Translucent System Bar的系特性,用于弥补系统通知栏突兀之处。
    沉浸式通知栏1
    这里写图片描述
    沉浸式通知栏2
    这里写图片描述
    沉浸式通知栏看起来效果更好

    只需四步完成沉浸式通知栏

    1 在values、values-v19、values-v21的style.xml都设置一个 Translucent System Bar 风格的Theme

    values/style.xml

    <style name="ImageTranslucentTheme" parent="AppTheme">
        <!--Android 4.4之前的版本上运行,直接跟随系统主题-->
    </style>

    values-v19/style.xml

    <style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
    </style>

    values-v21/style.xml

    <style name="ColorTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

    上面需要注意的地方是,无论你在哪个SDK版本的values目录下,设置了主题,都应该在最基本的values下设置一个同名的主题。这样才能确保你的app能够正常运行在 Android 4.4 以下的设备。否则,肯定会报找不到Theme的错误。

    2 在AndroidManifest.xml中对指定Activity的theme进行设置
    ColorTranslucentTheme.xml

    <activity
        android:name=".ui.ImageTranslucentBarActivity"
        android:label="@string/image_translucent_bar"
        android:theme="@style/ImageTranslucentTheme" />

    3 隐藏状态栏

    public class BaseActivity extends AppCompatActivity{
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        }
    }

    4 在Activity的布局文件中设置背景图片或颜色,同时,需要把android:fitsSystemWindows设置为true

    设置图片

    <?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="@mipmap/env_bg"
        android:fitsSystemWindows="true">
    
    </RelativeLayout>

    效果如下
    这里写图片描述
    就跟中华万年历的天气预报效果界面一样,系统的整个导航栏都融入了app的界面中,背景图片填满了整个屏幕,看起来舒服很多。这里还有一个android:fitsSystemWindows设置需要注意的地方。

    设置颜色

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/color_31c27c"
        android:fitsSystemWindows="true"
        android:orientation="vertical">
    
        <!--标题布局-->
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:background="@color/color_31c27c">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="QQ Music"
                android:textColor="@android:color/white"
                android:textSize="20sp" />
        </RelativeLayout>
    </LinearLayout>

    效果如下
    这里写图片描述
    相比中华万年历,QQ音乐采用的是另外一种实现的方式,它将app的Tab栏和系统导航栏分开来设置。
    由于它的Tab栏是纯色的,所以只要把系统通知栏的颜色设置和Tab栏的颜色一致即可。

    android:fitsSystemWindows的“踩坑”

    通过前面的两种方式,大家估计会留意到一个地方,就是所有实现 Translucent System Bar 效果的Activity,都需要在根布局里设置 android:fitsSystemWindows=”true” 。设置了该属性的作用在于,不会让系统导航栏和我们app的UI重叠,导致交互问题。这样说可能比较抽象,看看下面两个效果图的对比就知道了。
    这里写图片描述

    这里写图片描述

    源码点击此处下载

    转自:
    https://github.com/D-clock/AndroidSystemUiTraining/blob/master/note/00_AndroidSystemUI%EF%BC%9ATranslucentBar%E7%89%B9%E6%80%A7%E7%9A%84%E4%BD%BF%E7%94%A8.md

    展开全文
  • Android 9.0 中打开wifi时,不显示4G图标,只有信号值,现项目需求在打开wifi时仍然显示4G图标。 排查及修改过程如下: ...private void updateState(MobileIconState state) { //省略部分代码 if (mState.typeId !...

    Android 9.0 中打开wifi时,不显示4G图标,只有信号值,现项目需求在打开wifi时仍然显示4G图标。
    排查及修改过程如下:
    systemui/src/com/android/systemui/statusbar/StatusBarMobileView.java

    private void updateState(MobileIconState state) {
      //省略部分代码
       if (mState.typeId != state.typeId) {
                if (state.typeId != 0) {
                    if (!mStatusBarExt.disableHostFunction()) {
                        mMobileType.setContentDescription(state.typeContentDescription);
                        mMobileType.setImageResource(state.typeId);
                    }
                    mMobileType.setVisibility(View.VISIBLE);
                } else {
                    mMobileType.setVisibility(View.GONE);
                }
            }
      //省略部分代码  
    }
    

    由此可见当state.typeId=0时,会隐藏mobile_type图标,往上追溯,谁调用了updateState()方法:

    public void applyMobileState(MobileIconState state) {
            //省略部分代码
            if (!mState.equals(state)) {
                updateState(state.copy());
            }
        }
    

    一步一步查看调用关系,追溯到
    systemui/src/com/android/systemui/statusbar/policy/MobileSignalController.java的notifyListeners()方法:

    @Override
        public void notifyListeners(SignalCallback callback) {
        //省略部分代码
         // Show icon in QS when we are connected or data is disabled.
         boolean showDataIcon = mCurrentState.dataConnected || dataDisabled;
        //省略部分代码
        showDataIcon &= mCurrentState.isDefault || dataDisabled;
         int typeIcon = (showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.mDataType : 0;
       //省略部分代码
      callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, networkIcon, volteIcon,
                    qsTypeIcon,activityIn, activityOut, dataContentDescription, description,
                     icons.mIsWide, mSubscriptionInfo.getSubscriptionId(), mCurrentState.roaming,
                     mCurrentState.isDefaultData); 
       //省略部分代码
    }
    

    代码中有个配置:

    mConfig.alwaysShowDataRatIcon
    

    跟进去到NetworkControllerImpl.java的内部类Config:

     @VisibleForTesting
        public static class Config {
            public boolean showAtLeast3G = false;
            public boolean alwaysShowCdmaRssi = false;
            public boolean show4gForLte = false;
            public boolean hideLtePlus = false;
            public boolean hspaDataDistinguishable;
            public boolean inflateSignalStrengths = false;
            public boolean alwaysShowDataRatIcon = false;
    
            static Config readConfig(Context context) {
                Config config = new Config();
                //省略部分代码
                CarrierConfigManager configMgr = (CarrierConfigManager)
                        context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
                PersistableBundle b = configMgr.getConfig();
                if (b != null) {
                    config.alwaysShowDataRatIcon = b.getBoolean(
                            CarrierConfigManager.KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL);
                }
                return config;
            }
        }
    

    然后跟踪到framework代码CarrierConfigManager.java中:

      /**
         * Boolean indicating if show data RAT icon on status bar even when data is disabled
         * @hide
         */
        public static final String KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL =
                "always_show_data_rat_icon_bool";
    
      //默认值给的false
      sDefaults.putBoolean(KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL, false);
      
    

    所以修改策略为将此默认值改为true.

    修改carrier_config可参考链接:
    https://www.cnblogs.com/kunkka/p/8436151.html

    另外可以用命令

    adb shell dumpsys carrier_config
    

    查看配置信息,配置信息如图:
    图片.png

    展开全文
  • 有些Android设备没有实体的音量调节按钮,或者从保护实体按键的角度考虑,就需要在导航栏的虚拟按键中添加音量加减调节按键。 效果如下图所示: ...1.首先在SystemUI中添加音量加减的资源文件,路径如下: ...

    有些Android设备没有实体的音量调节按钮,或者从保护实体按键的角度考虑,就需要在导航栏的虚拟按键中添加音量加减调节按键。

    效果如下图所示:


    实现过程如下:

    1.首先在SystemUI中添加音量加减的资源文件,路径如下:

    frameworks/base/packages/SystemUI/res/

    将图片放入对应的drawable文件夹,包括音量+,和音量-,见上图。


    2.修改导航栏的布局文件,路径:

    frameworks/base/packages/SystemUI/res/

    在对应的layout文件夹中找到navigation_bar.xml文件进行修改:

    在返回键前面添加“音量减”,返回键的布局:

    [html] view plaincopy
    1. <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"  
    2.                 android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp"  
    3.                 android:layout_height="match_parent"  
    4.                 android:src="@drawable/ic_sysbar_back"  
    5.                 systemui:keyCode="4"  
    6.                 android:layout_weight="0"  
    7.                 systemui:glowBackground="@drawable/ic_sysbar_highlight"  
    8.                 android:contentDescription="@string/accessibility_back"  
    9.                 />  
    音量减的布局如下,这里先把Visibility定义为Gone,然后在代码中控制是否显示:

    [html] view plaincopy
    1. <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/sub"  
    2.                 android:src="@drawable/sub_normal"  
    3.                 android:layout_width="@dimen/navigation_key_width"  
    4.                 android:layout_height="match_parent"  
    5.                 android:layout_weight="0"  
    6.                 systemui:keyCode="302"  
    7.                 systemui:glowBackground="@drawable/ic_sysbar_highlight"  
    8.                 android:visibility="gone"/>    

    “音量加”添加到“最近应用”之后,最近应用的布局:

    [html] view plaincopy
    1. <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"  
    2.                 android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp"  
    3.                 android:layout_height="match_parent"  
    4.                 android:src="@drawable/ic_sysbar_recent"  
    5.                 android:layout_weight="0"  
    6.                 systemui:glowBackground="@drawable/ic_sysbar_highlight"  
    7.                 android:contentDescription="@string/accessibility_recent"  
    8.                 />  

    音量加的布局:

    [html] view plaincopy
    1. <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/add"  
    2.                 android:src="@drawable/add_normal"  
    3.                 android:layout_width="@dimen/navigation_key_width"  
    4.                 android:layout_height="match_parent"  
    5.                 android:layout_weight="0"  
    6.                 systemui:keyCode="301"  
    7.                 systemui:glowBackground="@drawable/ic_sysbar_highlight"  
    8.                 android:visibility="gone"/>   

    3.接着修改代码逻辑,文件路径:

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

    在private void prepareNavigationBarView() {……}函数中添加显示音量加减的代码:

    [java] view plaincopy
    1. mNavigationBarView.getAddVolume().setVisibility(View.VISIBLE);  
    2.         mNavigationBarView.getSubVolume().setVisibility(View.VISIBLE);  

    对应的函数getAddVolume()和getAddVolume()要在

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java

    中实现:

    [java] view plaincopy
    1. public View getAddVolume(){  
    2.        return mCurrentView.findViewById(R.id.add);  
    3.     }  
    4.   
    5.     public View getSubVolume(){  
    6.         return mCurrentView.findViewById(R.id.sub);  
    7.     }   

    最后就是功能实现了,在

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

    中添加监听函数:

    [java] view plaincopy
    1. private View.OnTouchListener mAddVolumeOnTouchListener = new View.OnTouchListener() {  
    2.       public boolean onTouch(View v, MotionEvent ev) {  
    3.       final int action = ev.getAction();  
    4.                 switch(action) {  
    5.                 case MotionEvent.ACTION_DOWN:  
    6.                    is_down = true;  
    7.                    Adjust_Volume(true);  
    8.                    maddHandler.postDelayed(maddRun, ADJUST_VOLUME_DELAY * 2);  
    9.                    break;  
    10.                 case MotionEvent.ACTION_MOVE:  
    11.                    is_down = true;  
    12.                    maddHandler.postDelayed(maddRun, ADJUST_VOLUME_DELAY * 2);  
    13.     //             maddHandler.removeCallbacks(maddRun);  
    14.                    break;  
    15.                 case MotionEvent.ACTION_UP:  
    16.                    is_down = false;  
    17.                    maddHandler.removeCallbacks(maddRun);  
    18.                    break;  
    19.                   
    20.          }   
    21.          return true;  
    22.       }  
    23.     };  
    24.   
    25.   
    26.     private View.OnTouchListener mSubVolumeOnTouchListener = new View.OnTouchListener() {  
    27.            public boolean onTouch(View v, MotionEvent ev) {  
    28.            final int action = ev.getAction();  
    29.             int x, y;  
    30.             //int mCode = ev.getAction();  
    31.   
    32.                 switch (action) {  
    33.                 case MotionEvent.ACTION_DOWN:  
    34.                   is_down = true;  
    35.                   Adjust_Volume(false);  
    36.                   msubHandler.postDelayed(msubRun, ADJUST_VOLUME_DELAY * 2);  
    37.                   break;  
    38.                 case MotionEvent.ACTION_MOVE:  
    39.                     
    40.                   is_down = true;  
    41.                   msubHandler.postDelayed(msubRun, ADJUST_VOLUME_DELAY * 2);  
    42.                   //msubHandler.removeCallbacks(msubRun);  
    43.                   break;  
    44.                 case MotionEvent.ACTION_UP:  
    45.                   is_down = false;  
    46.                   msubHandler.removeCallbacks(msubRun);  
    47.                   break;  
    48.             }  
    49.             return true;  
    50.         }  
    51.     };  
    52.   
    53.     public void Adjust_Volume(boolean opition){  
    54.             AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);  
    55.             if (audioManager != null) {  
    56.                 //  
    57.                  // Adjust the volume in on key down since it is more  
    58.                  // responsive to the user.  
    59.                  //  
    60.                     if(opition){  
    61.                             audioManager.adjustSuggestedStreamVolume(  
    62.                             AudioManager.ADJUST_RAISE,  
    63.                            AudioManager.USE_DEFAULT_STREAM_TYPE,  
    64.                            AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);  
    65.                     }else{  
    66.                             audioManager.adjustSuggestedStreamVolume(  
    67.                          AudioManager.ADJUST_LOWER,  
    68.                         AudioManager.USE_DEFAULT_STREAM_TYPE,  
    69.                         AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);  
    70.                     }  
    71.             }  
    72.     }  
    展开全文
  • 在清理手机木马程序(大部分手机存在远程监控木马)预装软件时,删除了某些程序,导致出现 “com.android.systemui意外停止” 的问题该问题又造成了系统软件phone,mms无法使用,导致不能打电话,发短信。...

    在清理手机木马程序(大部分手机存在远程监控木马)预装软件时,删除了某些程序,导致出现 “com.android.systemui意外停止” 的问题

    该问题又造成了系统软件phone,mms无法使用,导致不能打电话,发短信。就下了一个rom,用SP Flash Tool刷机,本以为刷机后就可修复这个问题,刷完机后重启手机,还是存在这个问题“com.android.systemui意外停止”。

    看来刷机也并未完全恢复到手机的初始状态,对手机已存在的文件进行了跳过,并未覆盖,而一些被我清理的软件倒是又出来了。

    现在解决“com.android.systemui意外停止”问题的大致思路有了,就是先清理掉com.android.systemui再进行刷机。到了这里,如何处理就根据你的具体情况来了。

    现将我的实际处理过程记录如下(当然你不必按我的方法来):

    1.将手机格式化后再刷机:

    使用SP Flash Too,选择“format -> download” 进行刷机,该方式自动执行 格式化 和刷机 两个过程
    ,无须人工干扰。执行完毕后,手机已成功刷机。装上电池,开机,发现已不再出现“com.android.systemui意外停止”问题。

    但另一个问题又出来了:“IMEI无效”,于是又开始解决这一问题。

    2.IMEI恢复

    1)记录下手机IMEI号和序列号(卸下电池即可看到)

    2)下载“IMEI串号生成修改器”

    3)运行“IMEI串号生成修改器”,按提示输入IMEI号和序列号,确定后产生两个文件MP0B_001和MP09_001。

    4)将文件MP0B_001和MP09_001放到指定位置:

    用adb push将文件从pc上push到手机上,然后将文件移到到指定位置

    移动MP0B_001
    # mv MP0B_001 /data/nvram/md/NVRAM/NVD_IMEI
    移动MP09_001
    # mv MP09_001 /data/nvram/md/NVRAM/CALIBRAT

    5)重启手机发行IMEI已恢复到出厂号码

    转载于:https://www.cnblogs.com/steveray/p/3475617.html

    展开全文
  • 需求:如上图,需要隐藏右上角的多用户蓝色图标. 修改后结果如下: 锁屏相关的布局在SystemUI ... //更新多用户图标的可见性 private void updateVisibilities() { if (mMultiUserSwitch.getParent() !...
  • 基于Android源码的SystemUI分析

    千次阅读 2014-04-01 16:50:13
    1 SystemUI是什么 SystemUI是一个系统的apk,它主要包括几个部分, status bar 、navigation bar,以及将status bar拉下来之后呈现在用户眼前的,quick settings, notification list等等。 官方文档定义的system ...
  • 这篇文章主要是向大家介绍 RecyclerView 和 ListView 的使用对比,文章主要包括以下几点的内容: RecyclerView 和 ListView 布局效果的对比 RecyclerView 和 ListView 一些常用的功能 和 API 的对比 ...
  • 初识 ToolbarToolbar 是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件 ,Google 非常推荐大家使用 Toolbar 来作为Android客户端的导航栏,以此来取代之前的 Actionbar 。与 Actionbar 相比,...
  • android SystemUI全解析

    千次阅读 2014-10-11 16:36:28
    本文由以下博客转载解释而成: Android 4.0 ICS SystemUI浅析——StatusBar加载流程分析
  • 前言SystemUI功能介绍SystemUI主要视图 PhoneStatusBarViewPanelHolderkeyguard_bouncer 总结 前言 ...Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照...
  • 原文链接 Intent 的 意图: Intent intent = new Inetnt(Setings); Setings: ACTIONACCESSIBILITYSETTINGS ...Intent intent = new Intent(Settings.ACTIONACCESSIBILITYSETTINGS);... st
  • Android TV开发,全局菜单,画面设置,音响效果,SystemUI,自定义按键,全局按键监听,硬件加速
  • SystemUI开发技巧

    千次阅读 2018-04-24 10:35:16
    dump 命令:adb shell dumpsys activity service com.android.systemui 参考文章 http://www.koffuxu.com/android/frameworks/330.html ...
  • Android版本: 8.1
  • UI是实现用户交互的重要途径之一,而Android中一个重要的UI元素就是SystemUI,本文分析基于Android 5.1,分析SystemUI的启动及运行过程。
  • AndroidM:SystemUi中重要标志位

    千次阅读 2016-09-20 15:39:03
    Android 5.0 中状态了重要的标志位总结如下: 1.状态栏上升,下拉的开始以及结束时的调用方法: PanelView.java 开始:notifyExpandingStarted 结束:notifyExpandingFinished 对应着mExpanding ...
  • SystemUi音量显示笔记

    千次阅读 2017-05-23 16:38:40
    frameworks/base/packages/SystemUI/src/...按下音量+/-键时,会在这个类中接收到按键变化,两种方法同时存在并接收; 1,IVolumeController.Stub private final VC mVolumeController = new
  • Android客制化——6.0底部导航栏增加隐藏按钮关于导航栏这一块按钮的增加其实网上也有很多的例子了,最多的可能就是一个关于音量加减的例子。 最近客户有要求做这么一个功能,即在底部导航栏再添加一个按钮,通过这...
  • 在项目开发的过程中遇到一个需要跳转到系统APN界面的需求,查阅网上方法这里对跳转系统设置的方法做一个总结: 有时候,我们在开发app时,会有跳转到系统设置界面的需求。例如:检查到网络连接错误,提示用户跳转到...
  • 公司接了国外的项目,项目是基于Android 8.1.0 源码进行系统定制。在系统有多个 User 并且是锁屏(有屏幕锁)状态下的时候,客户进行了操作,说 After switching user I should be getting screen to enter my PIN/...
  • 史上最详细的Android系统SystemUI 启动过程详细解析

    千次阅读 多人点赞 2017-07-28 16:07:05
    综合了多篇有关Android系统SystemUI介绍的博客,再加上笔者自己的理解,采用文字+代码+视图的方式全面解析SystemUI的启动流程。
  • NavigationDrawer 简介NavigationDrawer 是 Google 在 Material Design 中推出的一种侧滑导航栏设计风格。说起来可能很抽象,我们直接来看看 网易云音乐 的侧滑导航栏效果Google 为了支持这样的导航效果,推出一个新...
  • 最近在平板定制化开发过程中,有需求要求全屏显示,上滑显示导航栏,然后3秒钟后隐藏导航栏 1.全局手势事件监听: --- a/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java ...
  • 平台:android M 需求: 1.客户需求,预置一个客户带Launcher功能的apk.移除系统全部apk.... 2.工厂需要系统的Launcher3和systemUI才可以完成测试操作. ...基于以上需求,想到一个解决方案,第一次下载软件,系统带systemUI...
  • 1.未锁屏时禁止状态栏和通知栏下拉 vendor/mediatek/proprietary/packages/apps/SystemUI/src/... @@ -2179,7 +2179,7 @@ public class KeyguardViewMediator extends SystemU...
  • Android 8.0 系统中添加护眼模式,在设置中添加开关,可以使用户自行开启

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

androidsystemui