0
我使用透明屏幕覆蓋來檢測用戶長按手機的電源鍵(或者更確切地說,當關閉選項對話框出現時),這是正常工作。當Screenoverlay處於活動狀態時Softkeyboard不會顯示
不幸的是,當這個屏幕覆蓋被激活,軟鍵盤停止出現,這對我來說是一個問題。我怎樣才能防止呢?
我正在使用的代碼是大量基於此:Detect power button long press
public void warnOnShutdown() {
if (Settings.canDrawOverlays(this)) {
LinearLayout linearLayout = new LinearLayout(getApplicationContext()) {
public void onCloseSystemDialogs(String reason) {
if ("globalactions".equals(reason)) {
AntitheftStateManager.setShuttingDown(AntitheftService.this, true);
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return super.dispatchKeyEvent(event);
}
};
linearLayout.setFocusable(true);
View view = LayoutInflater.from(this).inflate(R.layout.system_overlay, linearLayout);
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
//params
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
100,
100,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
windowManager.addView(view, params);
}
}
佈局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="1dp"
android:layout_height="1dp"
android:orientation="vertical">
</LinearLayout>
編輯:
我也許應該提及的是,LinearLayout中附從服務的窗口管理器,這意味着鍵盤不僅僅是我的應用程序被阻止,它被阻止f或者只要服務正在運行,整個電話。
你有沒有試過這個InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(yourView,InputMethodManager.SHOW_IMPLICIT); – DkThakur
@DkThakur我現在試過了,它不工作。我可能不得不特別提到的一點是,屏幕覆蓋圖運行在附加到窗口管理器的服務中,所以這也發生在我的應用程序之外(例如,阻止瀏覽器的輸入) – Syzygy