Як приховати м'яку клавіатуру, коли починається діяльність


151

У мене є редакція android:windowSoftInputMode="stateVisible"у Manifest. Тепер клавіатура буде показана, коли я розпочну діяльність. Як це приховати? Я не можу використовувати, android:windowSoftInputMode="stateHiddenтому що коли клавіатура видима, тоді мінімізуйте додаток і відновіть його, клавіатура повинна бути видно. Я спробував

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

але це не спрацювало.

Відповіді:


1

Якщо ви не хочете використовувати xml, зробіть розширення Kotlin, щоб приховати клавіатуру

// In onResume, call this
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

Альтернативи на основі використання:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

Як показати м'яку клавіатуру

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

Більш простий метод при одночасному запиті на фокус на редакційному тексті

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

Спрощення бонусу:

Видаліть вимогу для будь-якого використання getSystemService: Бібліотека Splitties

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

361

У AndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

або спробуйте

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

Перевірте це також


3
Дякую за android:windowSoftInputMode="stateHidden"
Шилендра Мадда

2
На насправді є і великий відповідь на попередження зосередивши увагу на редагування тексту stackoverflow.com/questions/4668210 / ...
Борис Треухов

204

Для відображення / приховування клавіатури використовуйте такі функції:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

4
Контекст.INPUT_METHOD_SERVICE для тих, хто знаходиться у фрагментах чи не є основною діяльністю тощо
Олівер Діксон

7
Ви можете спробувати це. Він працює, якщо викликати його з діяльності. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) ‌;
Синан Діздаревич

Що робити, якщо нам потрібно зателефонувати цьому слухачеві? ЯкonFocusChange()
Андре Юхай

44

Просто додайте два атрибути до батьківського подання editText.

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

36

Помістіть це в маніфест всередині тегу "Активність"

  android:windowSoftInputMode="stateHidden"  

або android: windowSoftInputMode = "stateUnchanged" - Це працює так: не показувати його, якщо він ще не показаний, але якщо він був відкритий при введенні діяльності, залиште його відкритим).
Sujeet Kumar Gupta

я прав. але що робити, якщо орієнтація змінилася?
Санеєш

26

Спробуйте це:

<activity
    ...
    android:windowSoftInputMode="stateHidden|adjustResize"
    ...
>

Подивіться на це для отримання більш детальної інформації.


14

Щоб приховати softkeyboard в момент нового початку діяльності або onCreate(), і onStart()т.д. , ви можете використовувати код , наведений нижче:

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

10

Використання AndroidManifest.xml

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

Використання Java

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

використовуючи вищевказану клавіатуру рішення, приховуйте, але редагуйте текст, щоб не робити фокус, коли створюється активність, але захоплюйте його, коли ви торкаєтесь їх за допомогою:

додати у свій EditText

<EditText
android:focusable="false" />

також додайте слухача вашого EditText

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

7

Додайте наступний текст у свій XML-файл.

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>

6

Я сподіваюся, що це спрацює, я спробував багато методів, але цей працював для мене fragments. просто поставте цей рядок у onCreateview / init.

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

5

Щоб приховати програмну клавішу під час запуску нової активності або onCreate (), методом onStart () тощо скористайтеся наведеним нижче кодом:

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

Щоб приховати програмну клавішу під час роботи кнопки, натисніть активність:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

5

Використовуйте SOFT_INPUT_STATE_ALWAYS_HIDDEN замість SOFT_INPUT_STATE_HIDDEN

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

5

додайте у вашій діяльності маніфастів цю властивість

android:windowSoftInputMode="stateHidden" 

4

Помістіть цей код своїм файлом java та передайте аргумент для об’єкта в edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

Ви можете встановити конфігурацію на AndroidManifest.xml

Приклад:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

Використовуйте наступний код, щоб приховати функціональну клавішу при першому запуску активності

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

3

Спробуйте і цей

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

3

Вище відповіді також є правильними. Я просто хочу розповісти, що є два способи приховати клавіатуру при запуску діяльності, від manifest.xml. наприклад:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Вищеописаний спосіб завжди приховує це при вході в діяльність.

або

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Цей говорить, що не змінюйте його (наприклад, не показуйте його, якщо він уже не відображається, але якщо він був відкритим під час входу в діяльність, залиште його відкритим).

2

Ось що я зробив:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });

2

Якщо ваша програма орієнтована на Android API рівня 21 або більше, ніж доступний метод за замовчуванням.

editTextObj.setShowSoftInputOnFocus(false);

Переконайтеся, що ви вказали код нижче в EditTextтезі XML.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

Спробуйте це.

Спочатку у пошуковий xml поля (ім'я, підказки тощо) вводяться, @stringа не буквальні рядки.

Тоді метод onCreateOptionsMenu, він повинен мати ComponentNameоб'єкт з ім'ям пакета і заповнене ім'ям класу (з ім'ям пакета) - У разі діяльності , яка має SearchViewкомпонент такі ж , як використання показувати результати пошукуgetComponentName() , як говорить розробник google android.

Я спробував багато рішень і після багато-багато роботи це рішення працює для мене.


1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me

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

це буде працювати


Хоча цей код може відповісти на питання, надаючи додатковий контекст стосовно того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
rollstuhlfahrer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.