Экранная клавиатура открывается автоматически при запуске Activity - PullRequest
40 голосов
/ 11 ноября 2010

Когда начинается мое действие с макетом ScrollView и EditText с, EditText s получает фокус и открывается клавиатура Android OnScreen.

Как мне этого избежать?

Когда я использовал LinearLayout и RelativeLayout без ScrollView, этого не происходит.

Я пробовал это таким образом, и это работает, но это не очень хороший способ сделать это:

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>

Ответы [ 5 ]

105 голосов
/ 11 ноября 2010

Android автоматически открывает OnScreenKeyboard, если у вас есть фокус EditText, когда начинается действие.

Вы можете предотвратить это, добавив следующее в метод onCreate своей деятельности.

 getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
22 голосов
/ 11 октября 2012

Если вы хотите сделать это, отредактировав AndroidManifest:

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

строка android:windowSoftInputMode="stateHidden" - это та, которая мешает фокусировке клавиатуры.

16 голосов
/ 03 марта 2013

Другой способ заключается в добавлении LinearLayout:

android:focusable="true"

android:focusableInTouchMode="true"

Позвольте мне указать, что

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

все еще делает то же самое, но курсор все еще там.

0 голосов
/ 10 июня 2019

Это будет неуместное поведение

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

, но он сделает это гладко (для этого действия сделайте это в manifest)

 android:windowSoftInputMode="stateHidden"
0 голосов
/ 02 января 2013

Вы также можете использовать приведенное ниже утверждение,

(EditTextName) .setInputType (0)

он будет постоянно скрывать клавиатуру по умолчанию в виде перкулярного Edittext, даже при EditText Touch или Click.

...