web-dev-qa-db-ja.com

requestFocusが機能していません

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:padding="20dp" >

    <AutoCompleteTextView
        Android:id="@+id/autocomplete_zone"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:dropDownVerticalOffset="0.2dp"
        Android:ems="10"
        Android:hint="@string/zone_hint"
        Android:inputType="text"
        Android:lines="1"
        Android:maxLines="1"
        Android:popupBackground="#00ffffff"
        Android:textColor="#ffffff"
        Android:textColorHint="#ffffff" >

        <requestFocus />
    </AutoCompleteTextView>

    <ProgressBar
        Android:id="@+id/progressBar1"
        Android:layout_width="wrap_content"
        Android:layout_height="fill_parent"
        Android:layout_alignBottom="@id/autocomplete_zone"
        Android:layout_alignRight="@id/autocomplete_zone"
        Android:layout_alignTop="@id/autocomplete_zone"
        Android:paddingBottom="5dp"
        Android:visibility="invisible" />
</RelativeLayout>

上記のマークアップで

<requestFocus />

動作しません。アクティビティの開始時に、テキストビューはフォーカスされません。これは、テキストビューをオーバーレイするプログレスバーが原因ですか?これを修正する方法はありますか?

10
Upvote

解決しました!マニフェストで、アクティビティに次のように追加しました。

Android:windowSoftInputMode="stateAlwaysVisible"
5
Upvote

私は通常、フォーカスを設定するために以下を使用します:以下の属性をxml-layoutに追加します

<AutoCompleteTextView 
    Android:focusable="true" 
    Android:focusableInTouchMode="true"> 
</AutoCompleteTextView>

プログラムのようにフォーカスを設定します

((AutoCompleteTextView) findViewById(R.autocomplete_zone)).requestFocus();

f.e. onResumeまたはonWindowChanged

public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    if (hasFocus) {
        ((AutoCompleteTextView) findViewById(R.autocomplete_zone)).requestFocus();
    }
}
16
longi

上記のどれも私のために働いていません...これは私が使用したものです

txtView.getParent().requestChildFocus(txtView,txtView);
5
Evan Parsons

キーボードを強制的に表示したい場合は、コードでこれを試すことができます。

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

次に、このコードを使用してキーボードを閉じることができます。

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(autocomplete_zone.getWindowToken(), 0);
2
nikhil.thakkar

これをコードで行うには、Activityで:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
2
hidro