Androidアプリケーションで初期フォーカスを設定する


86

私のAndroidアプリケーションでButtonは、レイアウトの最初の部分に自動的に焦点が合わせられ、オレンジ色の輪郭が表示されます。できればXMLで初期フォーカスを設定するにはどうすればよいですか?これを何にも設定できませんか?

回答:


159

requestFocusタグを使用できます:

<Button ...>
  <requestFocus />
</Button>

ボタンの1つに自動フォーカスがかかるのは奇妙だと思いますが、どのビューでもその動作は観察されていません。


ええ、それは私のアプリケーションの2つで今起こっています。TextViewのように変更されない要素にrequestFocusを適用できると思いますか、それとも許可されませんか?
ステルスコプター2010

1
@stealthcopter:使用しているAndroidのバージョンを教えてください。2.1と2.2を使用していますが、requestFocusが機能しません。
anticafe 2011年

さて、私はすべてのバージョンでそれを使用してきましたが、私が持っていた問題はそれ自体で消えたように見えたので、私はあまり調査していません。
ステルスコプター2011年

19
XMLアプローチを試し、プログラマティックアプローチを試しました。それでも、EditTextはフォーカスを保持します。とてもうるさい !
誰か


63

@Someoneどこかで、私は上記のすべてを無駄に試しました。私が見つけた修正はhttp://www.helloandroid.com/tutorials/remove-autofocus-edittext-androidからのものです。基本的に、問題のあるボタンのすぐ上に非表示のレイアウトを作成する必要があります。

<LinearLayout android:focusable="true"
              android:focusableInTouchMode="true" 
              android:layout_width="0px"
              android:layout_height="0px" >
    <requestFocus />
</LinearLayout>

AlertDialogに焦点を合わせることができ、focusableintouchmodeを有効にすることでそれを正しく行うことができました。基本的に、その方法は次のとおりです。alert.show(); alert.getButton(AlertDialog.BUTTON_POSITIVE).setFocusableInTouchMode(true); alert.getButton(AlertDialog.BUTTON_NEGATIVE).requestFocus();
Sagar Hatekar 2012年

2
ありがとうございました!これが私の場合に機能した唯一の解決策でした。少し違う使い方をしましたが、私はフォーカスのものをRelativeLayout含むに入れましたEditText
kaka 2012

1
Android Pでは、次の変更がプラットフォームに導入されます。「領域が0(幅または高さが0)のビューはフォーカスできなくなりました。さらに、アクティビティはタッチモードで最初のフォーカスを暗黙的に割り当てなくなりました。代わりにアップしています。必要に応じて、最初のフォーカスを明示的にリクエストしてください。」
AustrianDude

28

:focusable:focusableInTouchModeを両方ともtrueに設定し、を呼び出しますrequestFocus。それはトリックを行います。


はい、これはそれを修正するための真の解決策です。ありがとうアンダース
gokhansari 2013

23

これが私にとって最も効果的であることがわかりました。

AndroidManifest.xmlに<activity> element追加android:windowSoftInputMode="stateHidden"

これにより、アクティビティに入るときに常にキーボードが非表示になります。


簡単で清潔!
SHADOW.NET 2018年

素晴らしい...これはとても印象的です!
グムル

11

このコード行をonCreate():に追加するだけです。

this.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

問題が解決しました。


Android2.3.3で動作します。
Gaurav Agarwal 2013

7

以下のコードを使用してください。

TableRow _tableRow =(TableRow)findViewById(R.id.tableRowMainBody);
tableRow.requestFocus();

それはうまくいくはずです。


3

@Someoneどこかで私はこれを使って焦点を明確にしました:

editText.clearFocus();

そしてそれは役立ちます


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.