2017-04-04 88 views
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或者只要服務正在運行,整個電話。

+0

你有沒有試過這個InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(yourView,InputMethodManager.SHOW_IMPLICIT); – DkThakur

+0

@DkThakur我現在試過了,它不工作。我可能不得不特別提到的一點是,屏幕覆蓋圖運行在附加到窗口管理器的服務中,所以這也發生在我的應用程序之外(例如,阻止瀏覽器的輸入) – Syzygy

回答

0

這就是當某人以代碼取得面值時發生的情況。原來,將類型從TYPE_SYSTEM_ALERT改爲TYPE_SYSTEM_OVERLAY解決了我的問題。

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      100, 
      100, 
      WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
      WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL 
        | WindowManager.LayoutParams.FLAG_FULLSCREEN 
        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 
        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
      PixelFormat.TRANSLUCENT); 
相關問題