Открывать программную клавиатуру программно

У меня есть активность без дочерних виджетов, и соответствующий xml файл,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
>
</LinearLayout>

и я хочу, чтобы программная программа открывалась программно, в то время как активность запускается. И то, что я пробовал до сих пор,

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (inputMethodManager != null) {
        inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    }

Дайте мне несколько советов.

+103
08 апр. '11 в 9:20
источник поделиться
20 ответов

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

InputMethodManager inputMethodManager =
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(
    linearLayout.getApplicationWindowToken(),
    InputMethodManager.SHOW_FORCED, 0);

Но я все еще не могу открыть это, пока активность открывается, так же как есть решение для этого?

+138
11 апр. '11 в 5:31
источник

Связанные вопросы


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

В вашем файле манифеста попробуйте добавить следующее к <activity>, которое вы хотите отобразить на клавиатуре при запуске:

android:windowSoftInputMode="stateVisible"

Это приведет к тому, что клавиатура станет видимой, когда начнется действие.

Дополнительные сведения см. в документации .

+111
13 окт. '11 в 14:15
источник

Пожалуйста, следуйте приведенному ниже коду. Я уверен, что ваша проблема будет решена.

if (imm != null){
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
   } 
+33
11 апр. '11 в 6:49
источник

Это работает

<activity
    ...
    android:windowSoftInputMode="stateVisible" >
</activity>

или

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+24
06 сент. '13 в 1:29
источник

Все, что мне было нужно, это разоблачить клавиатуру в очень точный момент. Это сработало для меня! Спасибо, Бенитес.

    private Handler mHandler= new Handler();

И в самый точный момент:

    mHandler.post(
    new Runnable() {
        public void run() {
            InputMethodManager inputMethodManager =  (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            inputMethodManager.toggleSoftInputFromWindow(yourEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
            yourEditText.requestFocus();
        }
    }); 
+15
24 авг. '12 в 7:16
источник

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

public void showKeyboard(final EmojiconEditText ettext){
          ettext.requestFocus();
          ettext.postDelayed(new Runnable(){
            @Override public void run(){
              InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
              keyboard.showSoftInput(ettext,0);
            }
          }
        ,200);
        }
+11
09 янв. '15 в 10:28
источник

Поместите это в метод onResume:

findViewById(R.id.root_view_of_your_activity_layout).post(
new Runnable() {
    public void run() {
        InputMethodManager inputMethodManager =  (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.toggleSoftInputFromWindow(yourEditText.getApplicationWindowToken(),     InputMethodManager.SHOW_FORCED, 0);
        yourEditText.requestFocus();
    }
});

требуется выполнить runnable, потому что, когда ОС запускает метод onResume, вы не можете быть уверены, что все виды, которые рисуют, поэтому метод post, вызванный из корневого макета, заставляет ждать, пока каждое представление будет готово.

+9
19 июл. '12 в 14:57
источник

в onCreate методе действия или onActivityCreated фрагмента

....
view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            view.removeOnPreDrawListener(this);
            InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

            // !Pay attention to return `true`
            // Chet Haase told to 
            return true;
        }
    });
+8
06 февр. '15 в 11:08
источник

похоже, что это работает

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_patientid);

        editText = (EditText)findViewById(R.id.selectPatient);
        //editText.requestFocus(); //works without that

    }

@Override
    protected void onResume() {

        findViewById(R.id.selectPatient).postDelayed(
        new Runnable() {
            public void run() {
                 editText.requestFocus();
                InputMethodManager inputMethodManager =  (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.showSoftInput(editText,InputMethodManager.SHOW_IMPLICIT);
            }
        },100);
        super.onResume();
    }

Кажется, это работает лучше: в манифесте:

<application>
    <activity
        android:name="com.doodkin.myapp.ReportActivity"
        android:label="@string/title_activity_report"
        android:screenOrientation="sensor" 
        android:windowSoftInputMode="stateHidden" > // add this or stateVisible
    </activity>
</application>

кажется, что манифест работает в android 4.2.2, но не работает в android 4.0.3

+7
04 июл. '14 в 23:32
источник

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

В манифесте:

<activity android:name="XXXActivity" android:windowSoftInputMode="adjustPan">
</activity>

В XXXActvity:

EditText et =  (EditText))findViewById(R.id.edit_text);  
  Timer timer = new Timer();
            TimerTask task = new TimerTask() {

                @Override
                public void run() {
                    InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.toggleSoftInputFromWindow(et.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);

                }
            };
            timer.schedule(task, 200);

Я предполагаю, что это сэкономит время для поиска этой проблемы.

+6
14 окт. '12 в 13:30
источник
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
+3
29 янв. '16 в 16:07
источник

Я использовал его как singleton like:

public static void showSoftKeyboard(final Context context, final EditText editText) {
        try {
            editText.requestFocus();
            editText.postDelayed(
                    new Runnable() {
                        @Override
                        public void run() {
                            InputMethodManager keyboard = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                            keyboard.showSoftInput(editText, 0);
                        }
                    }
                    , 200);
        } catch (NullPointerException npe) {
            npe.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Используйте его в своей деятельности, например:

showSoftKeyboard(this, yourEditTextToFocus);
+2
01 дек. '17 в 7:21
источник
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

Используйте вышеприведенный код в onResume(), чтобы открыть мягкую клавиатуру

+1
29 июн. '17 в 11:28
источник

Котлин

fun hideKeyboard(activity: Activity) {
    val view = activity.currentFocus
    val methodManager = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    assert(view != null)
    methodManager.hideSoftInputFromWindow(view!!.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
}

private fun showKeyboard(activity: Activity) {
    val view = activity.currentFocus
    val methodManager = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    assert(view != null)
    methodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}

Джава

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();
    InputMethodManager methodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    assert methodManager != null && view != null;
    methodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}

private static void showKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();
    InputMethodManager methodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    assert methodManager != null && view != null;
    methodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
+1
01 окт. '18 в 10:00
источник

Подобно ответу @ShimonDoodkin, это то, что я сделал в фрагменте.

qaru.site/questions/21494/...

    passwordInput.postDelayed(new ShowKeyboard(), 300); //250 sometimes doesn't run if returning from LockScreen

Где ShowKeyboard есть

private class ShowKeyboard implements Runnable {
    @Override
    public void run() {
        passwordInput.setFocusableInTouchMode(true);
        passwordInput.requestFocus();            
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0);
    }
}

После успешного ввода я также убеждаюсь, что скрываю клавиатуру

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
                    .hideSoftInputFromWindow(getView().getWindowToken(), 0);
+1
24 мар. '15 в 10:27
источник

Это необходимый исходный код:

public static void openKeypad(final Context context, final View v) 
 {
new Handler().postDelayed(new Runnable() 
{
    @Override
    public void run() 
    {
        InputMethodManager inputManager =   (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); 
        inputManager.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);    
        Log.e("openKeypad", "Inside Handler");
    }
},300);}

Подробнее см. по этой ссылке. Это помогло мне. https://github.com/Nikhillosalka/Keyboard/blob/master/README.md

+1
29 апр. '15 в 13:14
источник

InputMethodManager.SHOW_FORCED не хороший выбор. Если вы используете этот параметр, вы должны управлять скрытым состоянием клавиатуры. Мое предложение таково;

    public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
}

для получения дополнительной информации о InputMethodManager.SHOW_IMPLICIT и SHOW_FORCED; InputMethodManager

0
28 мар. '19 в 15:25
источник

Это работает:

private static void showKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}

И вы вызываете этот метод так:

showKeyboard(NameOfActivity.this);
0
24 февр. '19 в 19:48
источник

Слишком много ответов, но ничего не работало для меня кроме этого

inputMethodManager.showSoftInput(emailET,InputMethodManager.SHOW_FORCED);

Я использовал showSoftInput с SHOW_FORCED

И моя деятельность

 android:windowSoftInputMode="stateVisible|adjustResize"

надеюсь, что это поможет кому-то

0
05 мар. '17 в 15:43
источник

Опубликуйте этот метод в своей основной деятельности и используйте его в других видах деятельности, таких как талисман

public void openKeyboard() {
    InputMethodManager imm =
            (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    }
}
0
17 июн. '18 в 16:29
источник

Посмотрите другие вопросы по меткам или Задайте вопрос