2013-05-15 16 views
9

pływających Piszę aplikację, która wykorzystuje następujący kod do narysowania EditText na ekranie nad uruchomionych aplikacji:Android - Klawiatura nie pojawia się w oknie

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
        | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, 
       PixelFormat.TRANSLUCENT); 

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

windowManager.addView(mEditText, params); 

xml dla EditText jest:

<EditText 
      android:id="@+id/mEditText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:maxLines="3" 
      android:inputType="textAutoComplete|text" 
      android:focusable="true" 
      android:focusableInTouchMode="true" /> 

Jednak skupienie się na tym nie powoduje wyświetlenia klawiatury. Próbowałem zostały również programowo wychowanie go z onFocusListener:

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if(hasFocus) { 
        Log.d("", "Has focus"); 
        ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, InputMethodManager.SHOW_IMPLICIT); 
       } else { 
        Log.d("", "Lost focus"); 
       } 
      } 
     }); 

Ale mimo że nazywa się, jak wynika z LogCat, nic się nie dzieje. Jedynym sposobem znalazłem tak daleko, aby wyświetlić klawiaturę korzysta:

getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, 0); 

Ale to wydaje się wpisać na ekranie, a nie na EditText. Próbowałem również wyraźnego fokusowania, gdy editekst jest wyświetlany, ale bez skutku.

Zgaduję, że problem polega na tym, że używam "ruchomego okna", ale musi istnieć sposób, aby to działało, ponieważ aplikacje takie jak pływające kalkulatory istnieją w playstore, które pobierają dane wejściowe. Każdy ma jakieś pomysły ? Jestem zakłopotany :(

+0

Jak otrzymujesz wartość z edycji tekstu? – rup35h

Odpowiedz

11

Moje złe .. zdałem sobie sprawę, jeśli usunąć WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE działa dobrze .. głupia pomyłka

+0

Ale użycie tej flagi zapobiega kliknięciu na zewnątrz strony domowej –

-1

Programowo:

editText.requestFocus(); 

lub poprzez XML:

<EditText...> 
    <requestFocus /> 
</EditText> 
+0

Żadna z tych opcji nie działa tutaj – crazyfool

4

Zastosowanie WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.TYPE_PHONE, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
        PixelFormat.TRANSLUCENT); 

Aby uzyskać więcej szczegółów i przykład śledzić link: https://github.com/atifmahmood29/overlays-floating-window-like-facebook-messenger

+0

Dzięki Zapisane moje dni –

Powiązane problemy