web-dev-qa-db-fra.com

Le clavier à l'écran s'ouvre automatiquement au démarrage de l'activité

Lorsque mon activité avec une disposition ScrollView et EditTexts démarre, les EditTexts se concentrent et le clavier OnScreen Android Android) s'ouvre.

Comment puis-je éviter cela?

Quand j'utilisais LinearLayout et RelativeLayout sans ScrollView cela n'arrive pas.

Je l'ai essayé de cette façon et cela fonctionne, mais ce n'est pas un bon moyen de le faire:

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

Ensuite, vous avez un exemple de certaines de mes dispositions avec ce problème, lorsque cette activité démarre, le focus passe au premier EditText, Description et au Android = le clavier s'ouvre automatiquement, c'est très ennuyeux.

<?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

Android ouvre automatiquement le OnScreenKeyboard si vous avez un EditText concentré au début de l'activité.

Vous pouvez empêcher cela en ajoutant des suivis dans la méthode onCreate de votre activité.

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

Si vous souhaitez le faire en modifiant le manifeste Android:

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

la ligne Android:windowSoftInputMode="stateHidden" est celui qui empêche la mise au point du clavier.

23
Pere BG

Une autre façon consiste à ajouter sur LinearLayout:

Android:focusable="true"

Android:focusableInTouchMode="true"

Permettez-moi d'indiquer que

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

fait toujours la même chose, mais le curseur est toujours là.

17
Chris K.

Ce sera un comportement inapproprié

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

mais il le fera en douceur (faites-le dans manifest pour cette activité)

 Android:windowSoftInputMode="stateHidden"
0
Waqar Afzal

Vous pouvez également utiliser la déclaration ci-dessous,

(EditTextName) .setInputType (0)

il masque définitivement le clavier par défaut de l'Edittext perticulaire, même sur EditText Touch ou Click.

0
Addon_Android