1.在导航栏添加音量加减按钮

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

效果如下图所示:


实现过程如下:

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);                    }            }    }




转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui



更多相关文章

  1. Android(安卓)子布局不超过父布局 圆角
  2. 【Android】Sqlite数据库增删改查
  3. Android(安卓)Fragment 解析
  4. Android(安卓)控件屏幕适配之百分比布局
  5. Android(安卓)性能优化(一)
  6. Android布局属性android:clipToPadding的UI设计妙用
  7. [android开发之内容更新类APP]三、项目的基本功能之布局
  8. Android(安卓)仿iphone提醒事项(一)
  9. android 使用RelativeLayout布局出现的问题汇总(不定期添加更新)

随机推荐

  1. android读取data/data/包名/file路径下的
  2. Android中文api:android.accessibilityser
  3. Android(安卓)Activity组件的启动过程
  4. android http下载
  5. building android 问题
  6. Android获取包名、版本号、包名、meta-da
  7. android 全屏去掉底部虚拟导航栏
  8. android 通过 sharedpreferences 来缓存
  9. Android项目开发经验汇总
  10. Android(安卓)总结:自定义键盘实现原理和