web-dev-qa-db-ja.com

アクティビティが開始すると、OnScreenキーボードが自動的に開きます

ScrollViewレイアウトとEditTextsを使用したアクティビティが開始すると、EditTextsにフォーカスが移り、Android OnScreenキーボードが開きます。

どうすればそれを回避できますか?

LinearLayoutなしでRelativeLayoutScrollViewを使用していたとき、それは起こりません。

私はこの方法を試してみましたが、うまくいきましたが、それを行うには良い方法ではありません。

TextView TextFocus = (TextView) findViewById(R.id.MovileLabel);
TextFocus.setFocusableInTouchMode(true);
TextFocus.requestFocus();

次に、この問題のあるレイアウトの例をいくつか示します。このアクティビティが開始すると、フォーカスは最初のEditText説明に移動し、Androidキーボードが自動的に開きます。これは非常に迷惑です。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView Android:id="@+id/ScrollView01"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <LinearLayout 
        Android:orientation="vertical"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent" 
        Android:padding="10px">

        <RelativeLayout
            Android:gravity="center_vertical"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content">
            <TextView
                Android:id="@+id/UserLabel" 
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_marginTop="13px"
                Android:text="@string/userlabel"/>
            <TextView
                Android:id="@+id/User"
                Android:layout_alignBaseline="@id/UserLabel"
                Android:layout_alignParentRight="true"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="test"/>
        </RelativeLayout>

        <View
            Android:layout_gravity="center_horizontal"
            Android:layout_width="fill_parent"
            Android:layout_height="1dip"
            Android:background="#808080"
            Android:layout_marginTop="5px"
            Android:layout_marginBottom="12px"/>

        <RelativeLayout
            Android:gravity="center_vertical"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content">
            <TextView
            Android:id="@+id/DescriptionLabel" 
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="@string/desclabel"
            Android:layout_marginTop="13px"/>
            <EditText 
            Android:id="@+id/Description"
            Android:layout_alignBaseline="@id/DescriptionLabel"
            Android:layout_alignParentRight="true"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:width="180px"/>
        </RelativeLayout>

        <RelativeLayout
            Android:gravity="center_vertical"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content">
            <TextView
                Android:id="@+id/EmailLabel" 
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/emaillabel"
                Android:layout_marginTop="13px"/>
            <EditText 
                Android:id="@+id/Email"
                Android:layout_alignBaseline="@+id/EmailLabel"
                Android:layout_alignParentRight="true"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:width="180px"/>
        </RelativeLayout>

        <RelativeLayout
            Android:gravity="center_vertical"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content">
            <TextView
                Android:id="@+id/MovilePhoneLabel"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/movilephonelabel"
                Android:layout_marginTop="13px"/>
            <EditText 
                Android:id="@+id/MovilePhone"
                Android:layout_alignBaseline="@+id/MovilePhoneLabel"
                Android:layout_alignParentRight="true"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:width="180px"/>
        </RelativeLayout>

        <View
            Android:layout_gravity="center_horizontal"
            Android:layout_width="fill_parent"
            Android:layout_height="1dip"
            Android:background="#808080"
            Android:layout_marginTop="5px"
            Android:layout_marginBottom="10px"/>


        <RelativeLayout
            Android:gravity="center_vertical"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content">
            <Button
                Android:id="@+id/applybutton"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/apply"
                Android:width="100px"
                Android:layout_marginLeft="40dip"/>
            <Button
                Android:id="@+id/cancelbutton"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/cancel"
                Android:width="100px"
                Android:layout_alignBaseline="@+id/applybutton"
                Android:layout_alignParentRight="true"
                Android:layout_marginRight="40dip"/>
        </RelativeLayout>
    </LinearLayout>
</ScrollView>
44

アクティビティの開始時にEditTextにフォーカスがある場合、AndroidはOnScreenKeyboardを自動的に開きます。

アクティビティのonCreateメソッドに以下を追加することで、これを防ぐことができます。

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

AndroidManifestを編集する場合:

        <activity
        Android:name=".Dades"
        Android:label="@string/app_name" 
        Android:windowSoftInputMode="stateHidden">

この線 Android:windowSoftInputMode="stateHidden"はキーボードのフォーカスを妨げるものです。

23
Pere BG

別の方法は、LinearLayoutを追加することです。

Android:focusable="true"

Android:focusableInTouchMode="true"

私にそれを示しさせてください

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

まだ同じことをしますが、カーソルはまだそこにあります。

17
Chris K.

これは不適切な動作になります

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

しかし、それはスムーズに行われます(そのアクティビティの場合はmanifestで行います)

 Android:windowSoftInputMode="stateHidden"
0
Waqar Afzal

以下のステートメントも使用できます。

(EditTextName).setInputType(0)

editText TouchまたはClickでも、特定のEdittextのデフォルトキーボードを永久に非表示にします。

0
Addon_Android