1.在導航欄中添加音量加減button
html
一些Android音量調節button。或者從保護實體按鍵的角度考慮,就需要在導航欄的虛擬按鍵中加入音量加減調節按鍵。java
效果例如如下圖所看到的:android
實現步驟例如如下:app
1.首先在SystemUI中加入音量加減的資源文件。路徑例如如下:函數
frameworks/base/packages/SystemUI/res/佈局
將圖片放入相應的drawable目錄,包含音量+。和音量-,見上圖。post
2.改動導航欄的佈局文件。路徑:ui
frameworks/base/packages/SystemUI/res/
spa
在相應的layout目錄中找到navigation_bar.xml文件進行改動:.net
在返回鍵前面加入「音量減」。返回鍵的佈局:
<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"/>
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);
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