0

在Xamarin Forms應用程序中,我試圖創建一個自定義Entry實現,該實現在聚焦時不會自動顯示軟鍵盤。目標是在頁面上使用此條目的一個實例以及其他常規條目。Xamarin形成隱藏軟鍵盤的自定義條目渲染器

我熟悉的建議Xamarin窗體模式自定義視圖渲染,並且已成功創建兩個入口和它的渲染器,如下:

public class BlindEntry : Entry 
{ 
} 

[assembly: ExportRenderer(typeof(BlindEntry), typeof(BlindEntryRenderer))] 

public class BlindEntryRenderer : EntryRenderer 
{ 
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) 
    { 
     base.OnElementChanged(e); 

     if (Control != null) 
     { 
      Control.FocusChange += Control_FocusChange; 
     } 
    } 

    private void Control_FocusChange(object sender, FocusChangeEventArgs e) 
    { 
     if (e.HasFocus) 
     { 
      // What goes here? 
     } 
     else 
     { 
      // What goes here? 
     } 
    } 
} 

顯示和隱藏軟鍵盤,我想一個來自this question的建議將提供解決方案,但對於哪種方法是最佳方法有許多不同意見。另外,即使在選擇合適的模式後,我也不清楚如何從上述自定義渲染器中訪問所需的原生Android API。

例如,我知道我可以使用下面的呼叫(從Activity內)獲得到一個InputMethodManager的引用,但是它並不明顯如何從渲染器內引用的含活性:

var imm = GetSystemService(InputMethodService) 

非常感謝您的建議。

回答

0

OnElementChanged()試試這個:

Control.InputType = Android.Text.InputTypes.Null; 

這將防止鍵盤,而不必檢查其重點是選擇條目時出現。

===編輯===

原來居然還有就是ShowSoftInputOnFocusproperty可正是這種做。

Control.ShowSoftInputOnFocus = false; 
+0

這看起來像一個非常優雅的解決方案,但分配被忽略。如果在設置InputType屬性值後立即設置斷點,我可以看到它設置爲Android.Text.InputTypes.DatetimeVariationNormal。 –