2011-12-16 13 views
0

私はアプリ内をナビゲートする方法を探しており、すべての要素を仮想のdpadでスローします。しかし、どのようにして、最も近い隣を上、下、左、右の方向に見つけることができますか? 例:私はイベントを受け取りましたが、下のボタンに注目したいと思います。Android:特定の方向に最も近い隣(要素を表示)を見つける方法

私はこのようなXMLファイルで定義を使用したくない:

<LinearLayout android:orientation="vertical" ... > 

    <Button android:id="@+id/top" android:nextFocusUp="@+id/bottom" ... /> 
    <Button android:id="@+id/bottom" android:nextFocusDown="@+id/top" ... /> 

</LinearLayout> 

はどのように私はそれを行うことができますか?

Thx。このため

答えて

0

私はスマートなソリューション(例えば下る用)が見つかりました:すべての

bic=new BaseInputConnection(this.getWindow().getDecorView(),false); 
KeyEvent event2 = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN,0, KeyEvent.META_SYM_ON, 0, 0, KeyEvent.FLAG_VIRTUAL_HARD_KEY); 

bic.sendKeyEvent(event2); 

ザッツを、内部algortihmはで次の要素を見つけますあなたの選択した方向

0

あなたはそこにあなたがフォーカスを取得するために次のビューを検索するためView.focusSearch(int)を使用し、View.requestFocus()、方法View.getFocusedChild()で現在フォーカスビューを見つけることができ、ActivityonKeyDown()メソッドをオーバーライドする必要があります。

私はあなたが良い結果のために、この方法を組み合わせることができると思います:)

+0

私は特定の方向に隣の要素を取得するフォーカスされた要素のメソッドを検索し、見つかった要素にフォーカスを設定します。 – NitroBoarder

+0

私の編集した回答を参照してください – Jin35

+0

View.focusSearch(View.FOCUS_UP)をアプリケーションのクラッシュしようとすると、問題はmethode View.focusSearch(int)です。このメソッドは、要素のxmlに次の行がある場合にのみ機能します。android:nextFocusUp = "@ + id/bottom"しかし、すべての要素のすべてのビューでこのコードを必要としません。 – NitroBoarder

関連する問題