Android SystemUI源码分析与修改
2014-11-19 09:01
603 查看
1.在导航栏添加音量加减按钮
有些Android设备没有实体的音量调节按钮,或者从保护实体按键的角度考虑,就需要在导航栏的虚拟按键中添加音量加减调节按键。
效果如下图所示:
实现过程如下:
1.首先在SystemUI中添加音量加减的资源文件,路径如下:
frameworks/base/packages/SystemUI/res/
将图片放入对应的drawable文件夹,包括音量+,和音量-,见上图。
2.修改导航栏的布局文件,路径:
frameworks/base/packages/SystemUI/res/
在对应的layout文件夹中找到navigation_bar.xml文件进行修改:
在返回键前面添加“音量减”,返回键的布局:
“音量加”添加到“最近应用”之后,最近应用的布局:
音量加的布局:
3.接着修改代码逻辑,文件路径:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
在private void prepareNavigationBarView() {……}函数中添加显示音量加减的代码:
对应的函数getAddVolume()和getAddVolume()要在
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
中实现:
最后就是功能实现了,在
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
中添加监听函数:
转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui
有些Android设备没有实体的音量调节按钮,或者从保护实体按键的角度考虑,就需要在导航栏的虚拟按键中添加音量加减调节按键。
效果如下图所示:
实现过程如下:
1.首先在SystemUI中添加音量加减的资源文件,路径如下:
frameworks/base/packages/SystemUI/res/
将图片放入对应的drawable文件夹,包括音量+,和音量-,见上图。
2.修改导航栏的布局文件,路径:
frameworks/base/packages/SystemUI/res/
在对应的layout文件夹中找到navigation_bar.xml文件进行修改:
在返回键前面添加“音量减”,返回键的布局:
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back" android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_back" systemui:keyCode="4" android:layout_weight="0" systemui:glowBackground="@drawable/ic_sysbar_highlight" android:contentDescription="@string/accessibility_back" />音量减的布局如下,这里先把Visibility定义为Gone,然后在代码中控制是否显示:
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/sub" android:src="@drawable/sub_normal" android:layout_width="@dimen/navigation_key_width" android:layout_height="match_parent" android:layout_weight="0" systemui:keyCode="302" systemui:glowBackground="@drawable/ic_sysbar_highlight" android:visibility="gone"/>
“音量加”添加到“最近应用”之后,最近应用的布局:
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" android:layout_width="128dp" android:paddingStart="25dp" android:paddingEnd="25dp" android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" systemui:glowBackground="@drawable/ic_sysbar_highlight" android:contentDescription="@string/accessibility_recent" />
音量加的布局:
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/add" android:src="@drawable/add_normal" android:layout_width="@dimen/navigation_key_width" android:layout_height="match_parent" android:layout_weight="0" systemui:keyCode="301" systemui:glowBackground="@drawable/ic_sysbar_highlight" android: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); } } }
转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui
相关文章推荐
- 基于Android源码的SystemUI分析
- Android SystemUI源代码分析和修改
- android 6.0 SystemUI源码分析(1)-SystemUI介绍
- Android菜鸟之学习android源码之二(SystemUI导航栏初步认识及修改)
- android 6.0 SystemUI源码分析(4)-StatusBar显示流程
- 在不修改源码的情况下分析Android应用的操作日志
- Android SystemUI源码分析(一)
- Android5.1.1 - APK签名校验分析和修改源码绕过签名校验
- android 6.0 SystemUI源码分析(1)-SystemUI介绍 转
- Android5.1.1 - APK签名校验分析和修改源码绕过签名校验
- Android Settings和SettingsProvider源码分析与修改
- android 6.0 SystemUI源码分析(6)-StorageNotification介绍
- android 6.0 SystemUI源码分析(2)-SystemUI启动流程
- android 6.0 SystemUI源码分析(2)-SystemUI启动流程
- android_launcher的源码详细分析和壁纸修改
- Android Calculator2源码分析与修改
- android 6.0 SystemUI源码分析(4)-StatusBar显示流程
- android 6.0 SystemUI源码分析(5)-PowerUI介绍
- Android Settings和SettingsProvider源码分析与修改
- android 6.0 SystemUI源码分析(3)-Recent Panel加载显示流程