子ウィジェットのないアクティビティがあり、対応する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);
}
ガイダンスをください。
次の行を使用して、onclickイベント内でソフトキーボードを手動で表示すると、キーボードが表示されます。
InputMethodManager inputMethodManager =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInputFromWindow(
linearLayout.getApplicationWindowToken(),
InputMethodManager.SHOW_FORCED, 0);
しかし、アクティビティが開かれている間はまだ開けられないので、これに対する解決策はありますか?
マニフェストファイルで、アクティビティの開始時にキーボードを表示する<activity>
に次を追加してみてください。
Android:windowSoftInputMode="stateVisible"
これにより、アクティビティの開始時にキーボードが表示されるようになります。
その他のオプションについては、 documentation をご覧ください。
以下のコードに従ってください。あなたの問題は解決されると確信しています。
if (imm != null){
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
}
これは作品です
<activity
...
Android:windowSoftInputMode="stateVisible" >
</activity>
または
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
必要なのは、非常に正確な瞬間にキーボードを公開することだけでした。これは私のために働いた!ありがとう、ベニテス。
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();
}
});
次の行を使用して、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);
}
それを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();
}
});
oSがonResumeメソッドを起動すると、描画するすべてのビューを確認できないため、ルートレイアウトから呼び出されたpostメソッドがすべてのビューの準備ができるまで待機するため、実行可能ファイルが必要です。
in 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;
}
});
これは働いているようです
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では機能していないようです
このようにソフトキーボードをプログラムで表示するために使用しましたが、これはキーボードの起動中に画面の自動サイズ変更を防ぐために機能します。
マニフェスト:
<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);
これにより、他の人がこの問題を検索する時間を節約できると思います。
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
私はそれをシングルトンとして使用しました:
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);
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);
}
これは必須のソースコードです。
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
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
OnResume()で上記のコードを使用してソフトキーボードを開きます
@ShimonDoodkinの答えと同様に、これは私が断片的に行ったことです。
https://stackoverflow.com/a/29229865/24133
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);
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);
}
また、パラメーターを取得してビュー(通常はEditText)に集中できます。これにより、より便利な機能になります
inputMethodManager.SHOW_IMPLICITおよびSHOW_FORCEDの詳細については、 InputMethodManager
これは動作します:
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);
このメソッドを基本アクティビティに投稿し、チャームのような他のアクティビティを使用します
public void openKeyboard() {
InputMethodManager imm =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
}
public final class AAUtilKeyboard {
public static void openKeyboard(final Activity activity, final EditText editText) {
final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
}
public static void hideKeyboard(final Activity activity) {
final View view = activity.getCurrentFocus();
if (view != null) {
final InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}
すでにあまりにも多くの答えがありますが、これ以外に私のために働いたものはありません
inputMethodManager.showSoftInput(emailET,InputMethodManager.SHOW_FORCED);
showSoftInput
とSHOW_FORCED
を使用しました
そして私の活動は
Android:windowSoftInputMode="stateVisible|adjustResize"
これが誰かを助けることを願って