2010-12-23 10 views
5

Ich habe mir den ganzen Tag über den Kopf kratzt. Bei einer meiner Tätigkeiten (und nur einer), wenn ich die virtuelle Tastatur anrufe, erscheint darüber der Schiebegriff. Es ist mir gelungen, dieses Problem bei allen anderen Aktivitäten in meiner App zu beheben, indem ich android: windowSoftInputMode = "adjustPan" in jede Aktivität in meiner Manafest.xml-Datei einfüge, einschließlich der betreffenden Aktivität. Auch soweit ich feststellen konnte, hat keines der Objekte auf der Aktivität den Fokus (wenn man nicht herausfinden kann, wie man es findet). Ich habe den Fokus überprüft, indem ich this.getCurrentFocus() verwendet habe, und dann view.clearFocus() für die zurückgegebene Ansicht, falls es eine gab. Bis jetzt hat es keine Aussicht zurückgegeben, so weit ich sagen kann nichts hat Fokus.wie man die Schublade von der Oberseite der virtuellen Tastatur schieben

irgendwelche Ideen?

+1

ich in der gleichen Ausgabe lief und fand Ihre Frage als erstes Ergebnis. Wenn Sie eine funktionierende Lösung erhalten haben, können Sie sie unten posten. – keyboardsurfer

Antwort

0

Dies ist meine Problemumgehung .. in der Aktivität, die den EditText enthält Ich habe eine Unterklasse, die EditText erweitert. In dieser Unterklasse überschreibe ich die onMeasure() Methode, die überprüft, ob die Tastatur geöffnet ist.

public static class MyEditText extends EditText { 
      MyActivity context; 

      public void setContext(MyActivity context) { 
       this.context = context; 
      } 

      @Override 
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
       int height = MeasureSpec.getSize(heightMeasureSpec); 
       Activity activity = (Activity)getContext(); 
       Rect rect = new Rect(); 
       activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); 
       int statusBarHeight = rect.top; 
       int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight(); 
       int diff = (screenHeight - statusBarHeight) - height; 
       // assume all soft keyboards are at least 128 pixels high 
       if (diff>128) 
        context.showHandle(false); 
       else 
        context.showHandle(true); 

       super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
      } 
    } 

dann in der Aktivität, wenn die Tastatur des Schubladengriff geöffnet wird ein 1 Pixel x 1px transparentes Bild gesetzt ist, wenn die Tastatur wird der eigentliche Griff verborgen ist gezeigt:

private void showHandle(boolean show) { 
    ImageView drawer_handle = (ImageView) findViewById(R.drawable.handle); 
    if (show) 
      drawer_handle.setImageResource(R.drawable.handle); 
    else 
      drawer_handle.setImageResource(R.drawable.handle_blank); 
} 

Schließlich stellen Sie sicher, setContext() in onCreate() von rufen MyActivity

MyEditText met = (MyEditText) findViewById(R.id.edit_text); 
met.setContext(this); 
Verwandte Themen