web-dev-qa-db-ja.com

アクティビティの作成時にEditTextをフォーカスしないようにする方法

これについて議論している他の質問を読んだことがありますが、それらはすべて私のレイアウトで機能します。最初に作成されたものはexceptです。

現時点では、これは私のonCreateメソッドの一番上にあります:

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

^これにより、少なくとも起動時にキーボードがポップアップしないようになりますが、EditTextは引き続き注目されます。

これは私のXMLEditTextです:

<EditText
    Android:id="@+id/password"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/changePass"
    Android:layout_centerHorizontal="true"
    Android:layout_marginTop="167dp"
    Android:ems="10"
    Android:imeOptions="flagNoExtractUi"
    Android:inputType="textPassword"
    Android:maxLength="30" >
</EditText>

これは、アクティビティを立ち上げると次のようになります。

enter image description here

問題は、一部の携帯電話では、EditTextがこのようにフォーカスされている場合、書き込みできないことです。 notフォーカスしたい。

私がやったことは、EditTextsに焦点が当てられておらず、次のように見えるという点で、次のレイアウトで機能します。

enter image description here

ただし、同じレイアウトであることに注意してください。これは、ユーザーがこの画面に戻された後の画面です。これは、XMLと同じであるためXMLに何も問題がないことを示しますが、問題はEditTextがアクティビティが作成されたときにのみ焦点を当てます。

私は調査を行ったが、他の質問はすべてこれを助けてくれない(しかし、ありがたいことにキーボードが表示されないのを助けた)。起動時にEditTextが最初のスクリーンショットではなく、2番目のスクリーンショットのように見えるようにするにはどうすればよいですか?

64

Android:descendantFocusability="beforeDescendants"Android:focusableInTouchMode="true"などのレイアウトのプロパティを設定できます

例:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:id="@+id/mainLayout"
  Android:descendantFocusability="beforeDescendants"
  Android:focusableInTouchMode="true" >

    <EditText
        Android:id="@+id/password"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/changePass"
        Android:layout_centerHorizontal="true"
        Android:layout_marginTop="167dp"
        Android:ems="10"
        Android:imeOptions="flagNoExtractUi"
        Android:inputType="textPassword"
        Android:maxLength="30" >
    </EditText>

</RelativeLayout>

これが参考になりますように;)

XMLコード:

<EditText
    Android:id="@+id/password"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/changePass"
    Android:layout_centerHorizontal="true"
    Android:layout_marginTop="167dp"
    Android:ems="10"
    Android:focusable="false"
    Android:imeOptions="flagNoExtractUi"
    Android:inputType="textPassword"
    Android:maxLength="30" >
</EditText>

Javaコード:

EditText edPwd = (EditText)findViewById(R.id.password);
edtPwd.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            v.setFocusable(true);
            v.setFocusableInTouchMode(true);
            return false;
        }
    });

xMLでfocusableをfalseに設定し、コードを介してtrueに設定します

16
Meher

Main_layoutに次の2行を追加します。

Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"

例:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"> *YOUR LAYOUT CODE* </RelativeLayout>
12
avisper

これをonCreate()に追加します

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

またはonCreateView()で

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

XMLコード

<EditText 
    Android:imeOptions="flagNoExtractUi"
    Android:focusable="false"
    />

OnClickListernerのJavaコード

 mEdtEnterPhoneNumber.setFocusable(true);
    mEdtEnterPhoneNumber.setFocusableInTouchMode(true);
1
Hai Rom

最適なソリューションはこちらです: https://stackoverflow.com/a/45139132/317284

正確でシンプルなソリューションは、setFocusable falseとsetFocusableInTouchMode trueです。そのため、EditTextは、ユーザーがそのEditTextにタッチしたときにのみフォーカスを取得します

Android:focusable="false"
Android:focusableInTouchMode="true"
1
faraz khonsari

最も簡単な方法は追加することです

Android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

manifest.xmlファイルのアクティビティタグ内

0
Sudhir singh

Android:focusable="false"を使用して無効にすることもできますが、何らかの理由でそれが機能しない場合は、LinearLayoutを配置するだけで、レイアウトを中断することなくフォーカスを取得できます。

注:Eclipseには、LinearLayoutには内容がないため役に立たないというエラーが表示されます。問題なく無視できるはずです。

例えば:

<LinearLayout
    Android:focusable="true"
    Android:focusableInTouchMode="false"
    Android:layout_width="0dp"
    Android:layout_height="0dp"
    />
<EditText
    Android:id="@+id/password"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/changePass"
    Android:layout_centerHorizontal="true"
    Android:layout_marginTop="167dp"
    Android:ems="10"
    Android:imeOptions="flagNoExtractUi"
    Android:inputType="textPassword"
    Android:maxLength="30" >
</EditText>
</LinearLayout>
0
ThatGuyThere
<activity
            Android:name=".MainActivity"
            Android:windowSoftInputMode="stateAlwaysHidden" />

Android:windowSoftInputMode = "stateAlwaysHidden"

この行をManifest.xmlファイルのアクティビティタグに追加します。EditTextをクリックすると、キーボードがフォーカスされます。

0

マニフェストで、下のコードをコピーして貼り付けます。

 <activity
   Android:name=".LoginActivity"
   Android:windowSoftInputMode="stateAlwaysHidden"/>
0
Agilanbu

1)最も簡単なマニフェストを開き、アクティビティタグの間に次のコードを挿入します。

Android:windowSoftInputMode="stateHidden"

2)この属性を親レイアウトに配置します

Android:focusable="true" 
Android:focusableInTouchMode="true"
0
Vincent Mungai

これはプログラムで行うことができます。アクティビティのeditText.setEnabled(false)メソッドでonStart()を使用します(onCreate()ではありません-これはGUIコンポーネントを初期化するためのメソッドであるため)

0
Nicole Conrad