2013-05-15 5 views
9

galleggiante Sto scrivendo un'applicazione che utilizza il seguente codice per disegnare un EditText sullo schermo sopra le applicazioni in esecuzione:Android - La tastiera non compare nella finestra di

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); 

Il XML per l'EditText è:

<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" /> 

Tuttavia, concentrandosi su questo non viene visualizzata la tastiera. Ho anche provato programmazione portandolo con 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"); 
       } 
      } 
     }); 

Ma anche se questo è chiamato, come si vede dalla logcat, non succede nulla. L'unico metodo che ho trovato finora per visualizzare la tastiera sta usando:

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

ma che sembra digitare sullo schermo e non in EditText. Ho anche provato a mettere a fuoco in modo chiaro quando viene visualizzato l'edittext, ma inutilmente.

Sto indovinando il problema è perché sto usando una "finestra mobile", ma ci deve essere un modo per farlo funzionare come app come calcolatrici mobili esistono sul playstore che prendono input .. Qualcuno ha qualche idea ? Sono perplesso :(

+0

Come si stanno ottenendo il valore da modificare il testo? – rup35h

risposta

11

mio male .. ho capito se mi tolgo la WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE funziona benissimo .. stupido errore

+0

Tuttavia, l'utilizzo di questo flag impedisce l'accesso al sito di origine esterna –

-1

Programatically:

editText.requestFocus(); 

o tramite XML:

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

Nessuno di questi lavori qui – crazyfool

4

Usa 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); 

Per maggiori dettagli e un esempio seguire il link: https://github.com/atifmahmood29/overlays-floating-window-like-facebook-messenger

+0

Thanks Saved My Day –