android editview focus - アクティビティの起動時にEditTextがフォーカスを取得しないようにする



15 Answers

実際に問題になっているのは、まったく焦点を当てたくないということですか? または、 EditTextに焦点を当てた結果、仮想キーボードを表示したくないのですか? 私は実際にEditText開始に焦点を当てた問題は見ませんが、ユーザーがEditTextに集中して結果としてキーボードを開くように明示的に要求していないときにsoftInputウィンドウを開くことは間違いありません。

仮想キーボードの問題の場合は、 AndroidManifest.xml <activity>要素ドキュメントを参照してください。

android:windowSoftInputMode="stateHidden" - アクティビティに入るときに常に非表示にします。

またはandroid:windowSoftInputMode="stateUnchanged" - 変更しないでください(たとえば、まだ表示されていない場合は表示しませんが、アクティビティに入るときに開いていた場合は開いたままにしてください)。

xml java inputtype

私は2つの要素を持つAndroidでActivityを持っています:

  1. EditText
  2. ListView

私のActivityが始まると、 EditTextすぐに入力フォーカス(点滅カーソル)を持っています。 私は起動時に入力フォーカスを持たせたくない。 私は試した:

EditText.setSelected(false);

運がない。 Activity開始時にEditTextが自分自身を選択しないようにするにはどうすればよいですか?




私が見つけた唯一の解決策は次のとおりです。

  • LinearLayout作成する(他の種類のレイアウトが機能するかどうかはLinearLayoutない)
  • 属性を設定するandroid:focusable="true" android:focusableInTouchMode="true"

そして、 EditTextは、アクティビティの開始後にフォーカスを取得しません




他のポスターから提供された情報を使用して、私は以下のソリューションを使用しました:

レイアウトXMLで

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

onCreate()で

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

最後に、onResume()では、

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}



setSelected(false)代わりにclearFocus()試してください。 Androidのすべてのビューにはフォーカス可能性と選択性の両方が備わっているため、フォーカスをクリアしたいと思っています。




このソリューションのどれも私のために働いたことはありません。 私がオートフォーカスを修正する方法は:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>



layout最初のTextView値をtrueにするには、単に"focusable""focusable in focus mode"を設定することができlayout 。 このようにしてアクティビティが開始されると、 TextViewにフォーカスが当てられますが、その性質上、画面上に何も表示されず、キーボードは表示されません




私はプログラム的にすべてのフィールドからフォーカスをクリアする必要がありました。 私は主なレイアウト定義に次の2つのステートメントを追加しました。

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

それでおしまい。 私の問題を直ちに解決しました。 ありがとう、シルバー、正しい方向に私を指しています。




簡単な答えは、これをXMLの親レイアウトで追加するだけです。

android:focusable="true" 
android:focusableInTouchMode="true"



編集可能な最初のフィールドの前にこれを試してください:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();



遅く、しかし多分役立つかもしれない。 レイアウトの上部にダミーのEditTextを作成し、 onCreate()myDummyEditText.requestFocus()を呼び出します。

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

それは私が期待するように振る舞うようです。 構成の変更などを処理する必要はありません。これは、長いTextView(手順)を持つアクティビティに必要でした。




うん、同じことをしました - 最初のフォーカスを取得する「ダミー」線形レイアウトを作成します。 さらに、「次の」フォーカスIDを設定して、ユーザーが一度スクロールした後でそれ以上焦点を合わせることができないようにします。

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

ビューの焦点を取り除くだけの多くの仕事..

ありがとう




私にとって、すべてのデバイスでうまくいったのはこれです:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

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

問題のある焦点を絞ったビューの前に、これをビューとして置いてください。それだけです。




私がやった最も簡単なことは、onCreateの別のビューに焦点を当てることです:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

これによりソフトキーボードが停止し、EditTextにカーソルが点滅しませんでした。




<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>



これを実現するには、レイアウトの幅と高さを0dpに設定したダミーのEditTextを作成し、そのビューにフォーカスを要求します。 xmlレイアウトに次のコードスニペットを追加します。

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>



Related