博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android SystemUI源代码分析和修改
阅读量:5237 次
发布时间:2019-06-14

本文共 4155 字,大约阅读时间需要 13 分钟。

1.在导航栏中添加音量加减button

一些Android音量调节button。或者从保护实体按键的角度考虑,就须要在导航栏的虚拟按键中加入音量加减调节按键。

效果例如以下图所看到的:

实现步骤例如以下:

1.首先在SystemUI中加入音量加减的资源文件。路径例如以下:

frameworks/base/packages/SystemUI/res/

将图片放入相应的drawable目录,包含音量+。和音量-,见上图。

2.改动导航栏的布局文件。路径:

frameworks/base/packages/SystemUI/res/

在相应的layout目录中找到navigation_bar.xml文件进行改动:

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

音量减的布局例如以下。这里先把Visibility定义为Gone,然后在代码中控制是否显示:

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

音量加的布局:

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

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

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

mNavigationBarView.getAddVolume().setVisibility(View.VISIBLE);	    mNavigationBarView.getSubVolume().setVisibility(View.VISIBLE);
相应的函数getAddVolume()和getAddVolume()要在

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

中实现:

public View getAddVolume(){       return mCurrentView.findViewById(R.id.add);    }    public View getSubVolume(){        return mCurrentView.findViewById(R.id.sub);    }
最后就是功能实现了。在

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

中加入监听函数:

private View.OnTouchListener mAddVolumeOnTouchListener = new View.OnTouchListener() {      public boolean onTouch(View v, MotionEvent ev) {      final int action = ev.getAction();                switch(action) {                case MotionEvent.ACTION_DOWN:                   is_down = true;                   Adjust_Volume(true);                   maddHandler.postDelayed(maddRun, ADJUST_VOLUME_DELAY * 2);                   break;                case MotionEvent.ACTION_MOVE:                   is_down = true;                   maddHandler.postDelayed(maddRun, ADJUST_VOLUME_DELAY * 2);    //             maddHandler.removeCallbacks(maddRun);                   break;                case MotionEvent.ACTION_UP:                   is_down = false;                   maddHandler.removeCallbacks(maddRun);                   break;                         }          return true;      }    };    private View.OnTouchListener mSubVolumeOnTouchListener = new View.OnTouchListener() {           public boolean onTouch(View v, MotionEvent ev) {           final int action = ev.getAction();            int x, y;            //int mCode = ev.getAction();                switch (action) {                case MotionEvent.ACTION_DOWN:                  is_down = true;                  Adjust_Volume(false);                  msubHandler.postDelayed(msubRun, ADJUST_VOLUME_DELAY * 2);                  break;                case MotionEvent.ACTION_MOVE:                                    is_down = true;                  msubHandler.postDelayed(msubRun, ADJUST_VOLUME_DELAY * 2);                  //msubHandler.removeCallbacks(msubRun);                  break;                case MotionEvent.ACTION_UP:                  is_down = false;                  msubHandler.removeCallbacks(msubRun);                  break;            }            return true;        }    };    public void Adjust_Volume(boolean opition){            AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);            if (audioManager != null) {                //                 // Adjust the volume in on key down since it is more                 // responsive to the user.                 //                    if(opition){                            audioManager.adjustSuggestedStreamVolume(                            AudioManager.ADJUST_RAISE,                           AudioManager.USE_DEFAULT_STREAM_TYPE,                           AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);                    }else{                            audioManager.adjustSuggestedStreamVolume(                         AudioManager.ADJUST_LOWER,                        AudioManager.USE_DEFAULT_STREAM_TYPE,                        AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);                    }            }    }

转载请注明出处: http://blog.csdn.net/zhoumushui

版权声明:原创文章,转载请注明出处:http://blog.csdn.net/zhoumushui

转载于:https://www.cnblogs.com/bhlsheji/p/4658576.html

你可能感兴趣的文章
根据经纬度算距离
查看>>
恋爱的心声
查看>>
git 服务器搭建与运用
查看>>
(组件、路由)懒加载
查看>>
数据库查询拼接
查看>>
《C++反汇编与逆向分析技术揭秘》之十——构造函数
查看>>
2018年学习的一门语言
查看>>
lightoj 1057 - Collecting Gold(状压dp)
查看>>
1401机器翻译(Noip2010提高组第1题)
查看>>
矢量图
查看>>
关于restful开发的疑惑
查看>>
什么是Reactor模式,或者叫反应器模式
查看>>
高效程序员的工作场所和装备
查看>>
Windbg+Procdump解决w3wp.exe CPU过百问题
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
async await 和 task的区别和理解(可能有错)
查看>>
模拟一位顾客去银行取钱的情形
查看>>
hibernate增删改查
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>