를 사용하여 입력 상자를 표시하고 AlertDialog
있습니다. 을 EditText
호출하면 대화 상자 내부에 자동으로 초점이 맞춰 AlertDialog.show()
지지만 소프트 키보드는 자동으로 표시되지 않습니다.
대화 상자가 표시 될 때 소프트 키보드가 자동으로 표시되도록하려면 어떻게합니까? (물리적 / 하드웨어 키보드가 없습니다). 검색 단추를 눌러 전체 검색을 호출하는 방법과 유사하게 소프트 키보드가 자동으로 표시됩니다.
를 사용하여 입력 상자를 표시하고 AlertDialog
있습니다. 을 EditText
호출하면 대화 상자 내부에 자동으로 초점이 맞춰 AlertDialog.show()
지지만 소프트 키보드는 자동으로 표시되지 않습니다.
대화 상자가 표시 될 때 소프트 키보드가 자동으로 표시되도록하려면 어떻게합니까? (물리적 / 하드웨어 키보드가 없습니다). 검색 단추를 눌러 전체 검색을 호출하는 방법과 유사하게 소프트 키보드가 자동으로 표시됩니다.
답변:
당신은에 포커스 청취자를 만들 수 있습니다 EditText
온 AlertDialog
후 얻을, AlertDialog
'들 Window
. 거기에서을 호출하여 소프트 키보드 쇼를 만들 수 있습니다 setSoftInputMode
.
final AlertDialog dialog = ...;
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
final AlertDialog dialog = builder.create()
하고 show
대신 빌더의 대화 상자에서.
키보드 사용을 보여주기 위해 :
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
키보드 사용을 숨기려면 :
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(),0);
대화 상자를 만든 후 바로 소프트 키보드를 요청할 수 있습니다 (SDK-r20에서 테스트).
// create dialog
final AlertDialog dialog = ...;
// request keyboard
dialog.getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
나는 같은 문제가 있었고 다음 코드로 해결했다. 하드웨어 키보드가있는 전화에서 어떻게 작동하는지 잘 모르겠습니다.
// TextEdit
final EditText textEdit = new EditText(this);
// Builder
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Enter text");
alert.setView(textEdit);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String text = textEdit.getText().toString();
finish();
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
// Dialog
AlertDialog dialog = alert.create();
dialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(textEdit, InputMethodManager.SHOW_IMPLICIT);
}
});
dialog.show();
이 예제 http://android-codes-examples.blogspot.com/2011/11/show-or-hide-soft-keyboard-on-opening.html을 찾았습니다 . 바로 다음 코드를 추가하십시오 alert.show()
.
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
<activity
...
android:windowSoftInputMode="stateVisible" >
</activity>
또는
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
stateHidden
사용자가 새 항목을 생성하는 것을 감지하면 언급 한 코드 줄을 사용하여 키보드를 표시했습니다. :) 다시 한번 감사합니다.
((Activity) context).getWindow()....
.
다른 답변에서 코드 조각이 작동,하지만 당신은을 사용하는 경우 특히, 코드에 배치 할 위치를 항상 명확하지 않다 AlertDialog.Builder
과 다음 공식 대화 튜토리얼 은 사용하지 않기 때문에 final AlertDialog ...
나 alertDialog.show()
.
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
~보다 바람직하다
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
SOFT_INPUT_STATE_ALWAYS_VISIBLE은 포커스가 EditText에서 멀어지면 키보드를 숨기므로 SHOW_FORCED는 사용자가 홈 화면으로 돌아가거나 최근 앱을 표시하더라도 키보드가 명시 적으로 해제 될 때까지 키보드를 계속 표시합니다.
다음은 XML로 정의 된 EditText를 가진 사용자 정의 레이아웃을 사용하여 생성 된 AlertDialog의 작업 코드입니다. 또한 키보드에 "go"키가 있도록 설정하고 양수 버튼을 트리거 할 수 있습니다.
alert_dialog.xml :
<RelativeLayout
android:id="@+id/dialogRelativeLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<!-- android:imeOptions="actionGo" sets the keyboard to have a "go" key instead of a "new line" key. -->
<!-- android:inputType="textUri" disables spell check in the EditText and changes the "go" key from a check mark to an arrow. -->
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="16dp"
android:imeOptions="actionGo"
android:inputType="textUri"/>
</RelativeLayout>
AlertDialog.java :
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;
public class CreateDialog extends AppCompatDialogFragment {
// The public interface is used to send information back to the activity that called CreateDialog.
public interface CreateDialogListener {
void onCreateDialogCancel(DialogFragment dialog);
void onCreateDialogOK(DialogFragment dialog);
}
CreateDialogListener mListener;
// Check to make sure that the activity that called CreateDialog implements both listeners.
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (CreateDialogListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement CreateDialogListener.");
}
}
// onCreateDialog requires @NonNull.
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
LayoutInflater customDialogInflater = getActivity().getLayoutInflater();
// Setup dialogBuilder.
alertDialogBuilder.setTitle(R.string.title);
alertDialogBuilder.setView(customDialogInflater.inflate(R.layout.alert_dialog, null));
alertDialogBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mListener.onCreateDialogCancel(CreateDialog.this);
}
});
alertDialogBuilder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mListener.onCreateDialogOK(CreateDialog.this);
}
});
// Assign the resulting built dialog to an AlertDialog.
final AlertDialog alertDialog = alertDialogBuilder.create();
// Show the keyboard when the dialog is displayed on the screen.
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
// We need to show alertDialog before we can setOnKeyListener below.
alertDialog.show();
EditText editText = (EditText) alertDialog.findViewById(R.id.editText);
// Allow the "enter" key on the keyboard to execute "OK".
editText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button, select the PositiveButton "OK".
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
// Trigger the create listener.
mListener.onCreateDialogOK(CreateDialog.this);
// Manually dismiss alertDialog.
alertDialog.dismiss();
// Consume the event.
return true;
} else {
// If any other key was pressed, do not consume the event.
return false;
}
}
});
// onCreateDialog requires the return of an AlertDialog.
return alertDialog;
}
}
글쎄, 이것은 꽤 오래된 게시물이지만 여전히 추가 할 것이 있습니다.
다음은 키보드를 제어하는 데 도움이되는 두 가지 간단한 방법이며 완벽하게 작동합니다.
키보드 표시
public void showKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
View v = getCurrentFocus();
if (v != null)
imm.showSoftInput(v, 0);
}
키보드 숨기기
public void hideKeyboard() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
View v = getCurrentFocus();
if (v != null)
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
getCurrentFocus()
?
Activity
.
유쿠 솔루션에 대한 추가 정보를 알려 드리겠습니다. 왜냐하면이 작업을 수행하기가 어렵다는 것입니다. AlertDialog.Builder에서 AlertDialog 객체를 어떻게 얻습니까? 글쎄, 그것은 내 alert.show()
처형 의 결과입니다 .
final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
final EditText input = new EditText(getActivity());
alert.setView(input);
// do what you need, like setting positive and negative buttons...
final AlertDialog dialog = alert.show();
input.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
그렇습니다 당신은 setOnFocusChangeListener
그것으로 당신을 도울 것입니다 할 수 있습니다.
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
확장 기능을 사용하는 것이 텍스트 편집을 위해 키보드를 표시하는 더 좋은 방법이라고 생각합니다.
편집 텍스트 키보드를 표시하는 데 사용하는 방법은 다음과 같습니다.
kotlin 코드 :
전화 만하면됩니다edittext.showKeyboard()
fun EditText.showKeyboard() {
post {
requestFocus()
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
}
자바 코드 :
public static void showKeyboard(EditText editText) {
editText.post(new Runnable() {
@Override
public void run() {
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) editText.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
});
}
원래 질문은 대화 상자와 관련이 있으며 EditText는 정기적으로 표시됩니다. 어쨌든, 나는 이것이 당신 대부분에게도 효과가 있다고 생각합니다. 그래서 여기에 나를 위해 일하는 것이 있습니다 (위의 제안 된 최고 등급의 방법은 나를 위해 아무것도하지 않았습니다). 이 작업을 수행하는 사용자 정의 EditView가 있습니다 (하위 클래스는 필요하지 않지만 뷰가 표시 될 때 포커스를 잡고 싶기 때문에 목적에 편리하다는 것을 알았습니다).
이것은 실제로 tidbecks 답변과 거의 동일합니다. 나는 실제로 투표가 0이므로 그의 대답을 전혀 알지 못했습니다. 그런 다음 자신의 게시물에 댓글을 달려고했지만 너무 길었으므로 어쨌든이 게시물을 끝냈습니다. tidbeck은 키보드를 사용하는 장치에서 어떻게 작동하는지 잘 모르겠습니다. 두 경우 모두 동작이 똑같다는 것을 확인할 수 있습니다. 세로 모드에서는 소프트웨어 키보드가 팝업되고 가로 방향에서는 팝업되지 않습니다. 실제 키보드가 미끄러 져 나가거나 내 전화에 아무런 영향을 미치지 않습니다.
개인적으로 다음과 같이 사용하기에 약간 어색한 동작을 발견했습니다 InputMethodManager.SHOW_FORCED
. 이것은 내가 원하는대로 작동합니다. 방향에 관계없이 키보드가 표시되지만 하드웨어 키보드가 미끄러 져 있으면 적어도 내 장치에서는 키보드가 나타나지 않습니다.
import android.app.Service;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public class BringOutTheSoftInputOnFocusEditTextView extends EditText {
protected InputMethodManager inputMethodManager;
public BringOutTheSoftInputOnFocusEditTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public BringOutTheSoftInputOnFocusEditTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public BringOutTheSoftInputOnFocusEditTextView(Context context) {
super(context);
init();
}
private void init() {
this.inputMethodManager = (InputMethodManager)getContext().getSystemService(Service.INPUT_METHOD_SERVICE);
this.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
BringOutTheSoftInputOnFocusEditTextView.this.inputMethodManager.showSoftInput(BringOutTheSoftInputOnFocusEditTextView.this, InputMethodManager.SHOW_FORCED);
}
}
});
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (visibility == View.VISIBLE) {
BringOutTheSoftInputOnFocusEditTextView.this.requestFocus();
}
}
}
문제는 텍스트를 입력하는 장소가 처음에 숨겨져 있거나 중첩 되어 있기 때문에 AlertDialog가 자동으로 플래그를 설정 WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
하거나 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
사물이 표시되도록 소프트 입력을 트리거하지 않는 것 같습니다.
이 문제를 해결하는 방법은 다음을 추가하는 것입니다.
(...)
// Create the dialog and show it
Dialog dialog = builder.create()
dialog.show();
// After show (this is important specially if you have a list, a pager or other view that uses a adapter), clear the flags and set the soft input mode
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
키보드를 보여 주려면 다음을 수행해야했습니다.
Android TextField : 프로그래밍 방식으로 포커스 + 소프트 입력 설정
근본적으로 해결책은 다음과 같습니다
@Override
public void onResume() {
super.onResume();
//passwordInput.requestFocus(); <-- that doesn't work
passwordInput.postDelayed(new ShowKeyboard(), 325); //250 sometimes doesn't run if returning from LockScreen
}
어디 ShowKeyboard
있다
private class ShowKeyboard implements Runnable {
@Override
public void run() {
passwordInput.setFocusableInTouchMode(true);
//passwordInput.requestFocusFromTouch(); //this gives touch event to launcher in background -_-
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);
이 메소드를 Util 클래스에 넣고 어디에서나 사용하십시오.
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);
}
누구나 관심을 가질 수 있도록 멋진 kotlin-esqe 확장 기능을 만들었습니다.
fun Activity.hideKeyBoard() {
val view = this.currentFocus
val methodManager = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
assert(view != null)
methodManager.hideSoftInputFromWindow(view!!.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
}
fun Activity.showKeyboard() {
val view = this.currentFocus
val methodManager = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
assert(view != null)
methodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
이것은 당신에게 좋은 샘플입니다 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollID"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" >
<LinearLayout
android:id="@+id/test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="true"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:weightSum="1" >
<EditText
android:id="@+id/txtInpuConversation"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:hint="@string/edt_Conversation" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btnSend"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/btn_Conversation" />
</LinearLayout>
</LinearLayout>
이 답변이 필요한 이유-위의 해결 방법으로 키보드가 표시되지만 다른 곳을 클릭해도 사라지지 않습니다 EditText
. 따라서 EditText
초점을 잃을 때 키보드가 사라지도록 무언가를해야합니다 .
다음 단계를 수행하여이를 달성 할 수 있습니다.
다음 속성을 추가하여 상위보기 (활동의 컨텐츠보기)를 클릭 가능하고 집중 가능하게하십시오.
android:clickable="true"
android:focusableInTouchMode="true"
hideKeyboard () 메소드 구현
public void hideKeyboard(View view) {
InputMethodManager inputMethodManager =(InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),InputMethodManager.HIDE_IMPLICIT_ONLY );
}
마지막으로 편집 텍스트의 onFocusChangeListener를 설정하십시오.
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
hideKeyboard(v);
}
}
});
조금 까다 롭습니다. 나는 이런 식으로했고 효과가있었습니다.
1. 처음에는 창에서 소프트 입력을 숨기십시오. 소프트 키보드가 보이면 소프트 입력을 숨기거나 보이지 않으면 아무 것도하지 않습니다.
2. 대화 표시
3. 그러면 간단히 소프트 입력을 토글하기 위해 호출합니다.
암호:
InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
//hiding soft input
inputManager.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0);
//show dialog
yourDialog.show();
//toggle soft input
inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.SHOW_IMPLICIT);
이 시도
SomeUtils.java
public static void showKeyboard(Activity activity, boolean show) { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if(show) inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); else inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0); }
많은 것을 시도했지만 이것이 나를 위해 일한 것입니다 (kotlin).
val dialog = builder.create()
dialog.setOnShowListener {
nameEditText.requestFocus()
val s = ContextCompat.getSystemService(requireContext(), InputMethodManager::class.java)
s?.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
}
dialog.setOnDismissListener {
val s = ContextCompat.getSystemService(requireContext(), InputMethodManager::class.java)
s?.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
dialog.show()
https://stackoverflow.com/a/39144104/2914140를 보면 조금 단순화했습니다.
// In onCreateView():
view.edit_text.run {
requestFocus()
post { showKeyboard(this) }
}
fun showKeyboard(view: View) {
val imm = view.context.getSystemService(
Context.INPUT_METHOD_SERVICE) as InputMethodManager?
imm?.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}
https://stackoverflow.com/a/11155404/2914140 보다 낫습니다 .
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
홈 버튼을 누르고 홈 화면으로 이동하면 키보드가 열린 상태로 유지되기 때문입니다.