2017-11-07 3 views
0

私は自分のアプリケーションレイアウトの1つにテキストを編集しています。実際にタッチされたときにのみ、このEditTextはキーボードを開くようにしたいと思っています。EditTextがアクティビティ開始時にキーボードを起動しないようにしますか?

今のところ、いつでもアプリが開くたびにEditTextでキーボードが開きます。これは私が望むものではありません。私は、この修正するために、さまざまなXMLタグを試してみました

:私は求めています何

android:focusable="false" <--- Prevents keyboard from opening at all. 

android:focusable="true" 
android:focusableInTouchMode = "true"  <--- These tags give me the same result as no tags (keybaord will open on activity start) 

android:focusedByDefault = "true" <--- Only available in API >= 23 

はそれがとても難しいのEditTextのデフォルトのフォーカスを無効にすることである理由、ありますか?確かに私はこれを行う簡単な方法が欠けている。

EDIT:この行をAndroidManifestに追加すると、問題が解決しました。 android:windowSoftInputMode = "stateHidden" しかし、私はこの解決策が嫌いです。これはマニフェストにあるので、変更する必要のある単一のEditTextより多くのUI要素に影響を与えます。あなたがあなたの活動のために使用しているテーマの中に深く掘る場合

答えて

0

別の方法としては、ルートレイアウト要素にフォーカスを設定することができます。

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

例:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:focusable="true" 
    android:focusableInTouchMode="true"> 

    <EditText 
     android:inputType="text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 
+0

これはそれを行うための最善の方法のように思えます。ありがとうございました! –

+0

あなたは大歓迎です。解決策があなたのために良いなら、私は幸せです。私はこれが最善の方法だとは知らないが、確かに私が知っている実用的なバージョンだ。 – wyzard

0

使用android:windowSoftInputMode="stateHidden"

は、あなたがwindowSoftInputModeのデフォルト値はstateUnspecified|adjustPanであることがわかります。ドキュメントから:

stateUnspecified:システムが最もよく考えているものを使用してください。これがデフォルトです。

あなたが実行するアンドロイドデバイスによっては結果が異なることがあります。私はAPI-26エミュレータであなたのケースを再現しようとしましたが、キーボードが表示されません。stateHiddenを使用して、アクティビティが開始されたときに、EditTextがフォーカスされたときにソフトキーボードが表示されないようにすることができます。

これを解決する別の方法は、UIのいくつかの他の要素に対してrequestFocusに、EditTextがフォーカスを得るための最初のUI要素でないことを確認することです。私の経験では、これはハックのようなもので、アクセシビリティを混乱させます。達成するための最も安全でクリーンな方法は、実際にはstateHiddenを使用することです。

stateHidden:適切なときに(ユーザーがウィンドウに向かってナビゲートしているとき)、ソフト入力領域を非表示にします。

他のUI要素には影響しません。画面背景に基づいてこれにもadjustPanを使用することができます。

関連する問題