- 一、概述
- 二、增加在语言与输入法中的虚拟键盘开关
- 2.1 增加按键
- 2.2 增加按键的功能代码
- 2.3 增加按键字符串
- 三、加载到setting中
Android11导航栏右下方本来就有虚拟键盘的开关,但是在隐藏导航栏的情况下,无法显示出来。
查询源码发现虚拟键盘的开关由变量Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD决定
二、增加在语言与输入法中的虚拟键盘开关 2.1 增加按键packages/app/Settings/res/xml/language_and_input.xml
2.2 增加按键的功能代码
新建文件 packages/app/Settings/src/com/android/settings/inputmethod/VirtualKeyboardHidePreferenceController.java
package com.android.settings.inputmethod;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.icu.text.ListFormatter;
import android.text.BidiFormatter;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import androidx.preference.SwitchPreference;
import androidx.preference.Preference;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import android.content.Intent;
import java.util.ArrayList;
import java.util.List;
public class VirtualKeyboardHidePreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin, Preference.OnPreferenceChangeListener{
private static final String KEY_HIDE_VIRTUAL_KERYBOARD= "hide_virtual_keyboard";
public VirtualKeyboardHidePreferenceController(Context context) {
super(context);
}
@Override
public String getPreferenceKey() {
return KEY_HIDE_VIRTUAL_KERYBOARD;
}
@Override
public boolean isAvailable() {
return true;
}
@Override
public void updateState(Preference preference) {
int value = Settings.Secure.getInt(
mContext.getContentResolver(), Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0);
((SwitchPreference) preference).setChecked(value == 0);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean value = (Boolean) newValue;
if (value) {
Settings.Secure.putInt(
mContext.getContentResolver(), Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0);
} else {
Settings.Secure.putInt(
mContext.getContentResolver(), Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD, 1);
}
return true;
}
}
2.3 增加按键字符串
packages/app/Settings/res/values/strings.xml
Hide Virtual Keyboard
packages/app/Settings/res/values-zh-rCN/strings.xml
隐藏虚拟键盘
三、加载到setting中
packages/app/Settings/src/com/android/settings
import com.android.settings.inputmethod.VirtualKeyboardHidePreferenceController;
controllers.add(new VirtualKeyboardHidePreferenceController(context));



