2017-08-02 10 views
1

私が使用しているAndroidデバイスにはタッチスクリーンがありません。 KEYCODE_DPAD_UP、KEYCODE_DPAD_DOWNなどを生成できるタッチパッドがあります。しかし、私のXamarinアプリケーションがこれらのイベントに応答しているかどうかはわかりません。コントロールのグループ間で現在の選択を識別できるようにするための設定はありますか?Xamarinで現在選択されているコントロールを指定する方法は?

私はデバイスのホーム画面に移動し、DPadキーを使用して移動すると、現在選択されているアイコンの周りに薄い四角形が表示されます。私はこの動作を有効にするためにXamarinアプリ内に同様の設定があることを期待しています。よろしく。

答えて

2

アクティビティのCurrentFocusを使用するだけで、現在フォーカスを取得しているコントロールを取得できます。しかし、コントロールがフォーカスされたときに最初にすべての、強調表示されます通常我々は、例えば描画可能な状態リストリソースへのコントロールの背景を変更することができます。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/button_pressed" /> <!-- pressed --> 
    <item android:state_focused="true" 
      android:drawable="@drawable/button_focused" /> <!-- focused --> 
    <item android:state_hovered="true" 
      android:drawable="@drawable/button_focused" /> <!-- hovered --> 
    <item android:drawable="@drawable/button_normal" /> <!-- default --> 
</selector> 

この視覚的な動作は、ユーザーが持っていることを示すために、ボタン用ですコントロールに移動します。

私はデバイスのホーム画面に移動し、DPadキーを使用して移動すると、現在選択されているアイコンの周りに薄い四角形が表示されます。私はこの動作を有効にするためにXamarinアプリ内に同様の設定があることを期待しています。

だから、この薄い四角は、合焦状態のために設計された背景ことができます。

設定があるかどうかはわかりませんが、最初に述べたように、どのコントロールが現在フォーカスされているかを示すためにコード内でコードを実行したい場合は、CurrentFocusを使用できます。たとえば:あなたは、新しいコントロールがフォーカスされたときにその古い状態に戻す背景を変更することを忘れないでください、背後にあるコードでそれを行うにしたい場合は

public override bool DispatchKeyEvent(KeyEvent e) 
{ 
    if (e.Action == KeyEventActions.Up) 
    { 
     if (e.KeyCode == Keycode.DpadDown || e.KeyCode == Keycode.DpadUp 
      || e.KeyCode == Keycode.DpadLeft || e.KeyCode == Keycode.DpadRight) 
     { 
      var view = this.CurrentFocus; 
      view.SetBackgroundDrawable(...); 
     } 
    } 
    return base.DispatchKeyEvent(e); 
} 

は、言うことを忘れてください。 Emmm、状態リストリソースがここに最良の選択であると思われます。

+0

これは便利です。ありがとうございました。 – Peter

関連する問題