2013-08-26 19 views
5

私は「アンドロイド:windowSoftInputMode =」を使用することができます知っている。いくつかの自動オフセットを行うにはadjustPanを」しかし、私は実際にいくつかの特別な目的のためのソフトウェアキーボードの高さを取得したいAndroidのソフトキーボードの高さを取得するには?

私はここに同様のトピックがありますことを見つけることができました。: Getting the dimensions of the soft keyboardでも、これは普遍的な解決策ではありません。

ソフトキーボードの高さを取得する方法は一般的ですか(または現在のカーソル位置とソフトウェアキーボードのトップ位置の間のオフセット値はどのように取得できますか? )

ありがとうございました

+0

こんにちはLiangwang解決していますか?私も同じことが必要です。 – jrhamza

+0

キーボードの高さを取得するための組み込みメソッドはありません。 ViewTreeObserver.OnGlobalLayoutListener()を使用する必要があります。 – aravindkanna

答えて

0

ここで私の解決策、それはまたハッキーですが、問題を解決します。

  1. 画面の下部に透明な背景を持つ一時的な場所に場所があります。
  2. @billのようにマニフェスト内のアクティビティタグにandroid:windowSoftInputMode="adjustResize"フラグを追加しました。
  3. 今、本編はonGlobalLayout()です。そこで私は、Xamarin.Androidでのソフトキーボードの高さを取得し、一時ビューのy axisroot 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

の高さの間の差を計算するGlobalLayout変更イベントをリッスンとの変化の違いを計算するためにViewTreeObserver.IOnGlobalLayoutListenerを使用しますキーボードの高さを得るために前後のルートビュー。ネイティブAndroidコードでも同様のことができます。ここ

は、コードされています、あなたの問題は

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 
      } 
     } 
    } 
}   
関連する問題