web-dev-qa-db-ja.com

レイアウトを作成して表示するときにビューにフォーカスを設定する方法は?

現在、ButtonTextView、およびEditTextを含むレイアウトがあります。レイアウトが表示されると、フォーカスは自動的にEditTextに置かれ、Android電話にキーボードが表示されます。それは私が望むものではありません。レイアウトが表示されているときに、TextViewにフォーカスを設定する方法、または何にもフォーカスを設定できない方法はありますか?

89
user256239

フォーカスの設定:フレームワークは、ユーザー入力に応じてフォーカスの移動を処理します。特定のビューにフォーカスを強制するには、 requestFocus ()を呼び出します

102
Mark B

これは動作します:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
18
Charles Mosndup

キーボードを非表示にしてみてください。このようなもの:

InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
5
abeljus

フォーカスを設定するには、ハンドラーを使用してrequestFocus()を遅延させます。

private Handler mHandler= new Handler();

public class HelloAndroid extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     LinearLayout mainVw = (LinearLayout) findViewById(R.id.main_layout);

     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( 
           LinearLayout.LayoutParams.FILL_PARENT,
           LinearLayout.LayoutParams.WRAP_CONTENT);

     EditText edit = new EditText(this);
     edit.setLayoutParams(params);
     mainVw.addView(edit);

     TextView titleTv = new TextView(this);
     titleTv.setText("test");
     titleTv.setLayoutParams(params);
     mainVw.addView(titleTv);

     mHandler.post(
       new Runnable() 
       {
          public void run() 
          {
            titleTv.requestFocus();
          } 
       }
     );
   }
}
5
Dan McNerthney

これを追加する必要があります:

Android:focusableInTouchMode="true"
4
arif jusoh

セットする

 Android:focusable="true"

あなたの<EditText/>

4
ravi

試してみる

comp.requestFocusInWindow();
3
JARC

これらの行もOnResumeに設定し、コントロールを初期化するときにfocusableInTouchがtrueに設定されていることを確認します

<controlName>.requestFocus();

<controlName>.requestFocusFromTouch();
3

フォーカスを変更するには、xmlのtextViewをフォーカス可能にします

<TextView
            **Android:focusable="true"**
            Android:id="@+id/tv_id"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"/>

作成時にJavaで

textView.requestFocus();

または単にキーボードを非表示にします

public void hideKeyBoard(Activity act) {
    act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
    InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);
}
2
Mina Shaker

上記の答えはどれも私にはうまくいきません。唯一の(たとえば)解決策は、最初のTextViewdisabledEditTextに変更することですフォーカスを受け取ってから追加する

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

onCreateコールバックで、キーボードが表示されないようにします。これで、私の最初のEditTextはTextViewのように見えますが、最終的に最初のフォーカスを取得できます。

2
lorenzoff

最後の提案は正しい解決策です。繰り返しますが、最初にAndroid:focusable="true"をレイアウトxmlファイルに設定し、次にrequestFocus()をコードのビューに設定します。

1
Reza Nezami

テキストビューはフォーカスできないと思います。たとえば、ボタンにフォーカスを設定するか、プロパティfocusableをtrueに設定してください。

1
lapakrette

Android:windowSoftInputModeファイルのアクティビティにAndroidManifest.xmlを追加することから開始できます。

<activity Android:name="YourActivity"
          Android:windowSoftInputMode="stateHidden" />

これにより、キーボードは表示されなくなりますが、EditTextは引き続きフォーカスされます。これを解決するには、ルートビューでAndroid:focusableInTouchmodeAndroid:focusabletrueに設定します。

<LinearLayout Android:orientation="vertical"
              Android:focusable="true"
              Android:focusableInTouchMode="true"
              ...
              >
    <EditText
         ...
       />
    <TextView
         ...
       />
    <Button
         ...
       />
</LinearLayout>

上記のコードは、RelativeLayoutの代わりにEditTextがフォーカスを得ていることを確認します

1
Uilque Messias

レイアウトxmlファイルでAndroid:focusable="true"を設定し、コードのビューでrequestFocus()を設定します

いいえ、ここでは機能しません。

1
Charles Mosndup

ur xmlの最初のコントロールとしてサイズ「0 dip」のエディットテキストを追加できます。これにより、レンダーにフォーカスが移ります。

1
con_9

フォーカスは、タッチ以外の何か(つまり、dパッド、キーボードなど)を使用しているときにUIコンポーネントを選択するためのものです。一部のビューはデフォルトでフォーカス可能ではありませんが、どのビューでもフォーカスを受け取ることができます。 (ビューをsetFocusable(true)でフォーカス可能にし、requestFocus()で強制的にフォーカスすることができます。)

ただし、タッチモードの場合、フォーカスは無効になっていることに注意することが重要です。したがって、指を使用している場合、フォーカスをプログラムで変更しても何も起こりません。これの例外は、入力エディターから入力を受け取るビューの場合です。 EditTextはそのような例です。この特殊な状況では、setFocusableInTouchMode(true)を使用して、入力を送信する場所をソフトキーボードに知らせます。 EditTextにはデフォルトでこの設定があります。ソフトキーボードが自動的にポップアップします。

ソフトキーボードを自動的にポップアップ表示したくない場合は、@ abeljusが指摘したように一時的に非表示にできます。

InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

ただし、ユーザーがEditTextをクリックしても、キーボードは表示されます。

参考文献:

0
Suragch