功能實現
- 在下面的文件里面增加相關的字符:
- frameworks/base/packages/SystemUI/res/values/strings.xml
倒數第二行添加:
<string name="accessibility_power" translatable="false">Power</string>
- 添加按鍵布局:
- frameworks/base/packages/SystemUI/res/layout/power.xml
<com.android.systemui.statusbar.policy.KeyButtonView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res-auto"
android:id="@+id/power"
android:layout_width="@dimen/navigation_key_width"
android:layout_height="match_parent"
android:layout_weight="0"
android:src="@drawable/ic_sysbar_power"
systemui:keyCode="0"
android:scaleType="center"
android:contentDescription="@string/accessibility_power"
android:paddingStart="@dimen/navigation_key_padding"
android:paddingEnd="@dimen/navigation_key_padding"
/>
- 在這個文件里面添加如下內容
- frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
// 添加類的屬性
54 public static final String POWER = "power";
// 在 inflateButton 方法里面 添加大致在 這個地方的內容
287 // Add by Frey_chen 20200330
288 // Add Power layout button ---
289 }else if (POWER.equals(button)) {
290 v = inflater.inflate(R.layout.power, parent, false);
291 if (landscape && isSw600Dp()) {
292 setupLandButton(v);
293 }
294 // ---
- 修改 Android 默認配置
- frameworks/base/packages/SystemUI/res/values-sw600dp/config.xml
<string name="config_navBarLayout" translatable="false">space;volume_sub,back,home,recent,volume_add,screenshot,power;menu_ime</string>
- frameworks/base/packages/SystemUI/res/values-sw900dp/config.xml
<string name="config_navBarLayout" translatable="false">space;volume_sub,back,home,recent,volume_add,screenshot,power;menu_ime</string>
- frameworks/base/packages/SystemUI/res/values/config.xml
<string name="config_navBarLayout" translatable="false">space;volume_sub,back,home,recent,volume_add,screenshot,power;menu_ime</string>
- 設置按鍵可見
- frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
1443 private View.OnClickListener mPowerClickListener = new View.OnClickList ener(){
1444 public void onClick(View v){
1445 Intent intent = new Intent("android.intent.action.POWER_MENU");
1446 mContext.sendBroadcast(intent);
1447 }
1448 };
1478 // Add by Frey_chen 20200330
1479 // Add power button function ---
1480 ButtonDispatcher powerButton=mNavigationBarView.getPowerButton();
1481 powerButton.setOnClickListener(mPowerClickListener);
1482 //powerButton.setOnTouchListener(mPowerTouchListener);
1483 powerButton.setVisibility(View.VISIBLE);
1484 // ---
- frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
215 mButtonDisatchers.put(R.id.screenshot, new ButtonDispatcher(R.id.scr eenshot));
216 mButtonDisatchers.put(R.id.power, new ButtonDispatcher(R.id.power));
217 mButtonDisatchers.put(R.id.volume_add, new ButtonDispatcher(R.id.vol ume_add));
- 設置廣播監聽
- frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
1886 // Add by Frey_chen
1887 // Add monitor for POWER_MENU
1888 IntentFilter ifPower = new IntentFilter("android.intent.action.POWE R_MENU");
1889 context.registerReceiver(new BroadcastReceiver(){
1890 @Override
1891 public void onReceive(Context context, Intent intent) {
1892 //show global actions dialog
1893 showGlobalActionsInternal();
1894 }
1895 }, ifPower);