2013-08-26 11 views
5

मैं मैं "एंड्रॉयड: windowSoftInputMode =" का उपयोग कर सकते पता है। AdjustPan "कुछ स्वचालित रूप से भरपाई करने के लिए लेकिन मैं वास्तव में कुछ विशेष प्रयोजन के लिए सॉफ्टवेयर कीबोर्ड ऊंचाई प्राप्त करना चाहते हैंएंड्रॉइड सॉफ्ट कीबोर्ड ऊंचाई कैसे प्राप्त करें?

मैं वहाँ कोई समान विषय यहाँ है कि खोजने के लिए मिला है।: Getting the dimensions of the soft keyboard। लेकिन जाहिर है, यह एक सार्वभौमिक समाधान नहीं है।

क्या सॉफ्ट कीबोर्ड ऊंचाई प्राप्त करने के लिए एक सामान्य तरीका या अंतर्निहित विधि है? (या वर्तमान कर्सर स्थिति और सॉफ़्टवेयर कीबोर्ड शीर्ष स्थिति के बीच ऑफ़सेट मान कैसे प्राप्त किया जा सकता है?)

धन्यवाद बहुत

+0

हाय Liangwang, आपकी समस्या हल हो रहा है:

यहाँ कोड है? मुझे इसकी भी आवश्यकता है। – jrhamza

+0

कीबोर्ड ऊंचाई प्राप्त करने के लिए कोई अंतर्निहित विधि नहीं है। आपको ViewTreeObserver.OnGlobalLayoutListener() का उपयोग करना होगा – aravindkanna

उत्तर

0

यहां मेरा समाधान, यह हैकी भी है लेकिन समस्या का समाधान करें।

  1. मेरे पास स्क्रीन के नीचे पारदर्शी पृष्ठभूमि के साथ अस्थायी दृश्य पर स्थान हैं।
  2. मैंने android:windowSoftInputMode="adjustResize" मेनिफेस्ट में गतिविधि टैग में ध्वज जोड़ा है जैसे @ बिल सुझाव देता है।
  3. अब मुख्य कहानी onGlobalLayout() में है। वहाँ मैं अस्थायी देखने के y axis और 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

की ऊंचाई के बीच अंतर की गणना जाओ Xamarin.Android में शीतल कीबोर्ड ऊंचाई, ViewTreeObserver.IOnGlobalLayoutListener का उपयोग करें और घटना GlobalLayout परिवर्तन के लिए सुनने में परिवर्तन अंतर की गणना करने के कुंजीपटल की ऊंचाई प्राप्त करने के लिए पहले और बाद में मूल दृश्य। आप मूल एंड्रॉइड कोड में भी ऐसा ही कर सकते हैं।

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 
      } 
     } 
    } 
}   
संबंधित मुद्दे