2013-08-26 21 views
5

wiem, że mogę użyć „android: windowSoftInputMode =”. AdjustPan”zrobić jakiś automatycznie przesunięte Ale naprawdę chcę, aby uzyskać wysokość klawiatury oprogramowanie dla jakiegoś szczególnego celuJak uzyskać wysokość klawiatury Android?

muszę stwierdzić, że nie jest podobny temat tutaj.: Getting the dimensions of the soft keyboard. Ale oczywiście nie jest to rozwiązanie uniwersalne:

Czy istnieje typowy sposób lub wbudowana metoda uzyskiwania miękkiej wysokości klawiatury (lub jak uzyskać wartość przesunięcia między bieżącą pozycją kursora a górną pozycją klawiatury programowej?)

Dziękuję bardzo

+0

Hi Liangwang Czy problem został rozwiązany? Też potrzebuję tego samego. – jrhamza

+0

Nie ma wbudowanej metody uzyskiwania wysokości klawiatury. Musisz użyć ViewTreeObserver.OnGlobalLayoutListener() – aravindkanna

Odpowiedz

0

Oto moje rozwiązanie, jest też hacky, ale rozwiązuje problem.

  1. Mam miejsca na widoku tymczasowym z przezroczystym tłem u dołu ekranu.
  2. Dodałem android:windowSoftInputMode="adjustResize" znacznik aktywności w manifeście, jak @bill suggests.
  3. Teraz główna historia to onGlobalLayout(). Istnieje obliczyć różnicę między y axis widzenia temp i wysokości root view

    final View view = findViewById(R.id.base); 
    view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    
    @Override 
    public void onGlobalLayout() { 
    
        int rootViewHeight = view.getRootView().getHeight(); 
        View tv = findViewById(R.id.temp_view); 
        int location[] = new int[2]; 
        tv.getLocationOnScreen(location); 
        int height = (int) (location[1] + tv.getMeasuredHeight()); 
        deff = rootViewHeight - height; 
        // deff is the height of soft keyboard 
    } 
    }); 
    
0

Get klawiatura wysokość w Xamarin.Android użyć ViewTreeObserver.IOnGlobalLayoutListener do nasłuchiwania GlobalLayout Zmień imprezy i obliczyć różnicę zmiana w Widok główny przed i po, aby uzyskać wysokość klawiatury. Możesz to zrobić w natywnym kodzie Androida.

oto kod:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity 
{ 
     public static Android.Views.View RootView = null; 
     public void DetectSoftKeyboardHeight() 
     { 
      RootView = this.FindViewById(Android.Resource.Id.Content); 
      if(RootView!=null) 
       RootView.ViewTreeObserver.AddOnGlobalLayoutListener(new MyLayoutListener()); 
     } 
} 
/// <summary> 
/// My layout listener. 
/// Detect Android Soft keyboard height 
/// </summary> 
public class MyLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener 
{ 
    public void OnGlobalLayout() 
    { 
     // do stuff here 
     Android.Graphics.Rect r = new Android.Graphics.Rect(); 
     if (Mobibranch.Droid.MainActivity.RootView != null) 
     { 
      Mobibranch.Droid.MainActivity.RootView.GetWindowVisibleDisplayFrame(r); 

      int screenHeight = Mobibranch.Droid.MainActivity.RootView.RootView.Height; 
      int keyboardHeight = screenHeight - (r.Bottom); 

      if (keyboardHeight > 0) 
      { 
       //Keyboard is up on screen 
       Android.Util.Log.Verbose("[[[[MyLayoutListener]]]]", "Keyboard is up on screen, Height: "+keyboardHeight); 
      } 
      else 
      { 
       //Keyboard is hidden 
      } 
     } 
    } 
}   
Powiązane problemy