Вопрос по android – Как отключить всплывающее окно клавиатуры при редактировании текста?

81

В моем приложении первым видом всех моих экранов является EditText, поэтому каждый раз, когда я подхожу к экрану, выскакивает экранная клавиатура. Как я могу отключить это всплывающее окно и включить его, если вручную нажать на EditText ????

    eT = (EditText) findViewById(R.id.searchAutoCompleteTextView_feed);

    eT.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {

            if(hasFocus){
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
            imm.hideSoftInputFromWindow(eT.getWindowToken(), 0);
            }
        }
    });

XML-код:

<ImageView
    android:id="@+id/feedPageLogo"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:src="@drawable/wic_logo_small" />

<Button
    android:id="@+id/goButton_feed"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="@string/go" />

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/goButton_feed"
    android:layout_toRightOf="@id/feedPageLogo"
    android:hint="@string/search" />

<TextView
    android:id="@+id/feedLabel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/feedPageLogo"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/feed"
    android:textColor="@color/white" />

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ButtonsLayout_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button
        android:id="@+id/feedButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/feed"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/iWantButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/iwant"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/shareButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/share"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/profileButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/profile"
        android:textColor="@color/black" />
</LinearLayout>

<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/feedListView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/ButtonsLayout_feed"
    android:layout_below="@id/feedLabel"
    android:textSize="15dp" >
</ListView>

третий вид (EditText) - это фокус.

Вы можете опубликовать свой XML-код. user1213202

Ваш Ответ

28   ответов
32
     edittext.setShowSoftInputOnFocus(false);

Теперь вы можете использовать любую понравившуюся клавиатуру.

@ JithuP.S, почему он работает над титаном Карбон, чей уровень API составляет 19 ??
Это то, что я искал.
доступно с уровня API 21
Спасибо, это единственное решение, которое работает для меня + оно короткое и простое.
0
       <TextView android:layout_width="match_parent"
                 android:layout_height="wrap_content"

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

                <requestFocus/>
      </TextView>

      <EditText android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
-1

Просто нужно добавить недвижимостьandroid:focusable="false" особенноEditText в макете XML. Затем вы можете написать список щелчков дляEditText без всплывающей клавиатуры.

2

Спасибо @ A.B за хорошее решение

    android:focusableInTouchMode="false"

в этом случае, если вы отключите клавиатуру в редактировании текста, просто добавьтеandroid:focusableInTouchMode="false" в слогане edittext.

у меня работает в Android Studio 3.0.1 minsdk 16, maxsdk26

извините, если я не понял, чтобы ответить на решенный ответ. Я говорю спасибо А.Б. за хороший ответ, чтобы очистить мою проблему .. если я ошибаюсь, я могу удалить этот ответ, извините @DavidWalschots.
Это комментарий кA.Bответ? Или это ответ на оригинальный вопрос? Если это комментарий кA.Bs ответ, тогда вам следует использовать опцию комментария, предоставленную StackOverflow, и удалить этот ответ на исходный вопрос.
2

Ну, у меня была та же проблема, и я просто занялся фокусированием в XML-файле.

<EditText
            android:cursorVisible="false"
            android:id="@+id/edit"
            android:focusable="false"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

Вы, наверное, тоже ищете безопасность. Это поможет и в этом.

2

Попробуйте с этим:

EditText yourEditText= (EditText) findViewById(R.id.yourEditText); 
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT); 

Чтобы закрыть, вы можете использовать:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
 imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0); 

Попробуйте это так в своем коде:

ed = (EditText)findViewById(R.id.editText1);

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);  

ed.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
        imm.showSoftInput(ed, InputMethodManager.SHOW_IMPLICIT);  
    }
});
грустно ... это не решило мою проблему: (.... ты уверен, что это должно работать ?? Housefly
Большое спасибо ... надеюсь, что это работает Housefly
Я пытался это работает для меня. Где ты получаешь pblm
я отредактировал ответ. попробуйте один раз.
и как показать это при нажатии на edittext вручную ?? Housefly
80

Вы должны создать представление выше EditText, которое принимает «поддельный»; фокус:

Что-то вроде :

<!-- Stop auto focussing the EditText -->
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@android:color/transparent"
    android:focusable="true"
    android:focusableInTouchMode="true">
</LinearLayout>

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:inputType="text" />

В этом случае я использовал LinearLayout для запроса фокуса. Надеюсь это поможет.

Это сработало отлично ... благодаря Zaggo0

решил мою проблему. Спасибо
Добавление бесполезного представления является неоптимальным решением по сравнению с добавлением android: windowSoftInputMode = & quot; stateHidden & quot; на запись манифеста деятельности.
Такая плохая реализация иерархии View! Я думаю, что такого следует избегать, если это возможно.
Я испробовал все решения, и это единственное, что работает правильно! спасибо ясно и просто
хитрое решение. Спасибо
20

Добавьте код ниже в свой класс деятельности.

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

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

0

Это проблема может быть отсортирована с помощью, Нет необходимости устанавливать editText inputType для любых значений, просто добавьте нижнюю строку, editText.setTextIsSelectable (истина);

Эй, спасибо, что написали ответ! Однако, поскольку здесь уже так много ответов, было бы еще полезнее, если бы вы на самом деле написали это как комментарий к ответу Ранджита Кумара вместо того, чтобы делать его своим собственным ответом. Также было бы интересно упомянуть, каков эффект отinputType было бы. Но похоже, что было бы неплохо узнать, согласился ли я с этим другим ответом, поэтому, даже если вы настаиваете на том, чтобы оставить это как свой собственный ответ, пожалуйста, все равно оставьте комментарий там.
-1

для любого просмотра текста в вашей деятельности (или создать поддельный пустой просмотр текста с помощью Android: layout_width = & quot; 0dp & quot; Android: layout_height = & Quot; 0dp & Quot; ) и добавьте для этого textview следующее: Android: textIsSelectable = & Quot; истинно & Quot;

1

Для пользователей Xamarin:

[Activity(MainLauncher = true, 
        ScreenOrientation = ScreenOrientation.Portrait, 
        WindowSoftInputMode = SoftInput.StateHidden)] //SoftInput.StateHidden - disables keyboard autopop
9

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

InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(editText.getWindowToken(), 0);
и я могу включить его снова, используя EditText.onClick (im.unhideSoftInputFromWindow (editText.getWindowToken (), 0);) или что-то в этом роде ?? Housefly
0
private InputMethodManager imm;

...


editText.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.onTouchEvent(event);
        hideDefaultKeyboard(v);
        return true;
    }
});

private void hideDefaultKeyboard(View et) {
  getMethodManager().hideSoftInputFromWindow(et.getWindowToken(), 0);
}

private InputMethodManager getMethodManager() {
        if (this.imm == null) {
            this.imm = (InputMethodManager)  getContext().getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
        }
  return this.imm;
}
4

Используйте следующий код, напишите его подonCreate()

InputMethodManager inputManager = (InputMethodManager)
                                   getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                   InputMethodManager.HIDE_NOT_ALWAYS);         
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
1

Если вы используете Xamarin Вы можете добавить это

Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]

после этого вы можете добавить эту строку в метод OnCreate ()

youredittext.ShowSoftInputOnFocus = false;

Если целевое устройство не поддерживает вышеуказанный код, вы можете использовать приведенный ниже код в событии нажатия EditText

InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);
167

Лучшее решение лежит в файле Project Manifest(AndroidManifest.xml)добавьте следующий атрибут вactivity сооружать

android:windowSoftInputMode="stateHidden"


Example:

    <activity android:name=".MainActivity" 
              android:windowSoftInputMode="stateHidden" />

Description:

  • The state of the soft keyboard — whether it is hidden or visible — when the activity becomes the focus of user attention.
  • The adjustment made to the activity's main window — whether it is resized smaller to make room for the soft keyboard or whether its contents pan to make the current focus visible when part of the window is covered by the soft keyboard.

Introduced in:

  • API Level 3.

Ссылка на документы

Note: Values set here (other than "stateUnspecified" and "adjustUnspecified") override values set in the theme.

я пытался, но не работает на 5.0
Этот подход не работает, если у вас есть сочетание текстовых полей в деятельности, некоторые из которых вы хотите иметь клавиатуру, а другие нет. Посмотрите мой ответ о том, как это может быть достигнуто для каждого текстового поля в таком сценарии.
@ slogan621Пожалуйста, уделите немного времени пониманию вопроса здесь. Вы находитесь на другой касательной!
Привет Оскар, у меня работает на 5.0, 5.0.1, пожалуйста, проверьте, не в чем ли проблема в другом месте - напишите отдельный вопрос.
0

Если кто-то все еще ищет самое простое решение, установите следующий атрибут вtrue на вашем родительском макете

android:focusableInTouchMode="true"

Пример:

<android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="true">

.......
......
</android.support.constraint.ConstraintLayout>
Избиратели, пожалуйста, прокомментируйте свои аргументы, прежде чем голосовать!
4

попробуйте ....... я решаю эту проблему, используя код: -

EditText inputArea;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
inputArea = (EditText) findViewById(R.id.inputArea);

//This line is you answer.Its unable your click ability in this Edit Text
//just write
inputArea.setInputType(0);
}

Вы ничего не можете ввести по умолчанию калькулятор на что-либо, но вы можете установить любую строку.

попытайся

Это работает хорошо, спасибо
5

Объявите глобальную переменную для InputMethodManager:

 private InputMethodManager im ;

Под onCreate () определите это:

 im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 im.hideSoftInputFromWindow(youredittext.getWindowToken(), 0);

Установите onClickListener для этого текста редактирования внутри oncreate ():

 youredittext.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        im.showSoftInput(youredittext, InputMethodManager.SHOW_IMPLICIT);
    }
});

Это будет работать

Пожалуйста, оставьте свой код. Что ты получаешь, пока выполняешь?
Нет, не работает Housefly
да, я использую устройство для тестирования Housefly
Вы тестируете это с помощью эмулятора или устройства. Если вы попробуете это с помощью эмулятора, вы не получите программные клавиши. Проверьте это с помощью устройства. Это будет работать.
весь код в вопросе, экранная клавиатура не появляется, когда я нажимаю на текст редактирования Housefly
1

onCreate() ме-

    editText = (EditText) findViewById(R.id.editText);
    editText.requestFocus();
    editText.postDelayed(new Runnable() {
        public void run() {
            InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            keyboard.hideSoftInputFromWindow(
                    editText.getWindowToken(), 0);
        }
    }, 200);
0

Попробуйте этот ответ,

editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);

Примечание: только для API 11+

0

В приложении для Android, которое я собирал, у меня было триEditTextвLinearLayout расположены горизонтально. Я должен был предотвратить появление программной клавиатуры при загрузке фрагмента. В дополнение к настройкеfocusable а такжеfocusableInTouchMode правда наLinearLayoutЯ должен был установитьdescendantFocusability вblocksDescendants, ВonCreate, Я звонилrequestFocus наLinearLayout, Это предотвратило появление клавиатуры при создании фрагмента.

Макет -

    <LinearLayout
       android:id="@+id/text_selector_container"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:weightSum="3"
       android:orientation="horizontal"
       android:focusable="true"
       android:focusableInTouchMode="true"
       android:descendantFocusability="blocksDescendants"
       android:background="@color/black">

       <!-- EditText widgets -->

    </LinearLayout>

ВonCreate - mTextSelectorContainer.requestFocus();

1

Я обнаружил, что следующий шаблон хорошо работает для меня в коде, где я хочу показать диалоговое окно для получения ввода (например, строка, отображаемая в текстовом поле, является результатом выбора, сделанного из списка флажков в диалоге, а не текст вводится с клавиатуры).

  1. Disable soft input focus on the edit field. I can't disable for the entire activity, as there are edit fields I do want the keyboard to be used for in the same layout.
  2. Initial clicks in the text field yield a focus change, a repeated click yields a click event. So I override both (here I don't refactor the code out to illustrate both handlers do the same thing):

    tx = (TextView) m_activity.findViewById(R.id.allergymeds);
    if (tx != null) {
        tx.setShowSoftInputOnFocus(false);
        tx.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if (hasFocus) {
                    MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                    mld.setPatientId(m_sess.getActivePatientId());
                    mld.show(getFragmentManager(), "Allergy Medications Dialog");
                }
            }
        });
        tx.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                mld.setPatientId(m_sess.getActivePatientId());
                mld.show(getFragmentManager(), "Allergy Medications Dialog");
            }
        });
    }
    
0

InputMethodManager imm;

imm = (InputMethodManager)
getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);

if (isETEnable == true) {

    imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
    ivWalllet.setImageResource(R.drawable.checkbox_yes);
    etWalletAmount.setEnabled(true);
    etWalletAmount.requestFocus();
    isETEnable = false;
    } 
else {

    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);
    ivWalllet.setImageResource(R.drawable.checkbox_unchecked);
    etWalletAmount.setEnabled(false);
    isETEnable = true;
    }
7

Two Simple Solutions:

First Solution добавляется ниже строки кода в XML-файле манифеста. В файле манифеста (AndroidManifest.xml) добавьте следующий атрибут в конструкцию действия

Android: windowSoftInputMode = & Quot; stateHidden & Quot;

Example:

<activity android:name=".MainActivity" 
          android:windowSoftInputMode="stateHidden" />

Second Solution добавляет ниже строку кода в деятельности

//Block auto opening keyboard  
  this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Мы можем использовать любое решение выше. Спасибо

17

Люди предложили много отличных решений здесь, но я использовал эту простую технику с моим EditText (ничего в java и AnroidManifest.xml не требуется). Просто установите ваш focusable и focusableInTouchMode в false прямо на EditText.

 <EditText
        android:id="@+id/text_pin"
        android:layout_width="136dp"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textAlignment="center"
        android:inputType="numberPassword"
        android:password="true"
        android:textSize="24dp"
        android:focusable="false"
        android:focusableInTouchMode="false"/>

Мое намерение здесь состоит в том, чтобы использовать это поле редактирования в активности блокировки приложения, где я прошу пользователя ввести PIN-код, и я хочу показать свою собственную панель ввода PIN-кода. Протестировано с minSdk = 8 и maxSdk = 23 на Android Studio 2.1

enter image description here

это сделало мою жизнь прощеstackoverflow.com/questions/9577304/…
0

Просто, просто удалите & quot; тег из файла XML

Пожалуйста, не могли бы вы уточнить это и показать пример. Посмотри пожалуйстаHow to Answer.
1

Единственное, что вам нужно сделать, это добавитьandroid:focusableInTouchMode="false" на EditText в XML и все. (Если кому-то все еще нужно знать, как это сделать простым способом)

круто ... это сработало

Похожие вопросы