2013-04-10 3 views
5

Ich habe mehrere Beiträge zu diesem Problem gelesen und die Lösung war OnGlobalLayoutListener. Problem hier ist, dass meine Anwendung in manifest folgende erklärt hat:Erkennen der Sichtbarkeit und Höhe des Soft-Eingangs bei Verwendung des Vollbildmodus

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 

So ist die Input Mode anzupassen nicht funktioniert und ich kann nicht OnGlobalLayoutListener

verwenden, wie das Ereignis zu bekommen, dass Soft-Input ist sichtbar/weg, und Ich müsste auch die Höhe der Eingabe erhalten, um mein aktuelles Layout bottomMargin anzupassen.

Danke.

Antwort

1

Ich weiß nicht, wie Sie OnGlobalLayoutListener verwenden, aber es funktioniert unten in meinem Code fein:

 final View activityRootView = findViewById(R.id.container); 
     final ViewTreeObserver observer = activityRootView 
       .getViewTreeObserver(); 
     observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 

       Rect r = new Rect(); 
       // r will be populated with the coordinates of your view 
       // that area still visible. 
       activityRootView.getWindowVisibleDisplayFrame(r); 
       int heightDiff = activityRootView.getRootView().getHeight() 
         - (r.bottom - r.top); 
       Toast.makeText(TestActivity.this, String.valueOf(heightDiff), 
         Toast.LENGTH_SHORT).show(); 

      } 
     }); 

Der obige Code ist in onResume() meiner TestActivity mit dem Thema @android:style/Theme.NoTitleBar.Fullscreen

Layout-Datei für die Ausblick:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/textview" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="aaa" /> 

</LinearLayout> 

Die Aktivität config in menifest:

<activity 
    android:name=".ui.activity.TestActivity" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
+0

Kannst du die XML auch posten, meine Anwendung hat nur eine Aktivität und alles andere sind Fragmente. – Niko

+0

http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-isvisible Dies besagt eindeutig, dass es nicht funktioniert und Es gibt auch Bugs für Google darüber. – Niko

+0

Und aufgrund dieser Post scheint das ein Duplikat zu sein. – Niko

0

Ich benutze dies für die Erkennung der Sichtbarkeit von SoftInput. Versuchen Sie folgendes:

public boolean isKeyBoardVisible; 
    int previousHeightDiffrence = 0; 

    public void checkKeyboardHeight(final View parentLayout) { 

     parentLayout.getViewTreeObserver().addOnGlobalLayoutListener(
       new ViewTreeObserver.OnGlobalLayoutListener() { 

        @Override 
        public void onGlobalLayout() { 

         Rect r = new Rect(); 
         parentLayout.getWindowVisibleDisplayFrame(r); 

         int screenHeight = parentLayout.getRootView() 
           .getHeight(); 
         int heightDifference = screenHeight - (r.bottom); 

         if (previousHeightDiffrence - heightDifference > 50) { 

          // Keyboard is not visible 
         } 
         if (previousHeightDiffrence - heightDifference < -50) { 

          // Keyboard Visible 
         } 

         previousHeightDiffrence = heightDifference; 
         if (heightDifference > 100) { 

          isKeyBoardVisible = true; 

         } else { 

          isKeyBoardVisible = false; 

         } 

        } 
       }); 

    } 

hier parentLayout ist oberstes Layout meiner Tätigkeit und heightDifference ist in der Höhe meiner Tastatur, wenn Tastatur sichtbar ist .....

+0

Nicht funktioniert atleast mit meiner API-Ebene, die 8 ist. Und Dianne Hackborn posted Antwort: https://groups.google.com/forum/?fromgroups=#!msg/android-developers/T193nVgXDSA/O6UZmDqskFYJ -> Es kann nicht Arbeit. – Niko

+0

Dies beantwortet die Frage nicht. Die Frage bezog sich nur auf den Vollbildmodus. – colintheshots

0

starten:

Layout:

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <MyView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</RelativeLayout> 

Implementieren Sie dann die MyView

public class MyView extends View 
{ 
    public static int ScreenHeight; 

    @Override 
    public function onDraw(Canvas canvas){ 
      if(ScreenHeight != canvas.getHeight()){ 
       // this is your event 
      } 
      ScreenHeight = canvas.getHeight(); 

    } 
} 

Jetzt ScreenHeight ist was du suchst.

+0

Nun, das hat mit meiner Frage absolut nichts zu tun. – Niko

+0

@Niko Ich bearbeite es für Sie –

+1

http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-isvisible das hat das gleiche Problem. Das Fenster passt die Größe des Inhalts nicht an, sodass die Bildschirmhöhe gleich bleibt. – Niko

Verwandte Themen