2013-04-10 11 views
5

Ho letto più post di questo problema e la soluzione era utilizzare OnGlobalLayoutListener. Problema qui è che la mia domanda ha dichiarato seguente in palese:Rileva la visibilità e l'altezza dell'input morbido quando si utilizza la modalità a schermo intero

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

Così l'inputmode regolare non funziona e non posso usare OnGlobalLayoutListener

Come ottenere l'evento che l'ingresso morbido è visibile/andata, e Avrei anche bisogno di ottenere l'altezza di input per regolare il mio layout corrente bottomMargin.

Grazie.

risposta

1

Non so come lo si utilizza OnGlobalLayoutListener ma funziona bene nel mio codice qui sotto:

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

      } 
     }); 

il codice di cui sopra è in onResume() della mia TestActivity con il tema @android:style/Theme.NoTitleBar.Fullscreen

file di layout per la vista:

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

La configurazione attività 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

Puoi anche postare l'xml, la mia applicazione ha solo un'attività e tutto il resto sono Frammenti. – Niko

+0

http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible Questo afferma chiaramente che non funziona e ci sono anche bug per Google a riguardo. – Niko

+0

E a causa di questo post sembra essere un duplicato. – Niko

0

Io lo uso per rilevare la visibilità di softInput. Prova questo:

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; 

         } 

        } 
       }); 

    } 

qui parentLayout è superiore la maggior parte il layout della mia attività e heightDifference è l'altezza della mia tastiera se la tastiera è visibile .....

+0

Non funziona correttamente con il mio livello API che è 8. E Dianne Hackborn ha inviato una risposta a questo: https://groups.google.com/forum/?fromgroups=#!msg/android-developers/T193nVgXDSA/O6UZmDqskFYJ -> Non può lavoro. – Niko

+0

Questo non risponde alla domanda. La domanda riguardava solo la modalità a schermo intero. – colintheshots

0

Prova questo:

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> 

quindi implementare la 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(); 

    } 
} 

Ora ScreenHeight è quello che stai cercando.

+0

Beh, questo non ha assolutamente nulla a che fare con la mia domanda. – Niko

+0

@Niko Lo modifica per voi –

+1

http://stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible questo ha lo stesso problema. La finestra non ridimensiona il contenuto in modo che l'altezza dello schermo rimanga invariata. – Niko

Problemi correlati