私の場合は次のとおりです。フォーカスが無効になっているEditTextフィールドが1つあります。 EditTextフィールドの横に、入力メソッド用の2つのボタンがあります。だから私は最初のボタンをクリックしたときに欲しい:ソフトキーボードを開き、EditTextフィールドのテキストを編集する。私は多くの方法を試します:
_InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
_
そして私にはうまくいきません。ソフトキーボードを開く唯一の方法は次のとおりです。
toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
ただし、EditTextフィールドから情報を編集する方法はありません。
ボタンをクリックしたときに、キーボードを開いてEditTextのテキストを編集する方法を教えてください。どうもありがとう!
編集:
したがって、EditTextはデフォルトでフォーカス可能ではありません。キーボードボタンをクリックすると、フォーカス可能になります。次に、ソフトキーボードを表示してテキストを入力し、EditTextに表示します。挿入する他の方法は、キーボードを必要としないA-B-Cボタンです。それはモールス信号入力のようなものになります-A-B-Cボタンを押し続けます:)私の場合に実装するために提案された例を試してみます。君たちありがとう :)
皆さんの助けに感謝します:)私はあなたが私にくれたすべての提案を使用し、他の多くのスクリプトを検索してテストし、最終的に私のコードは機能しています:)
これが私の最終的なコードです:
InputEditText = (EditText) findViewById(R.id.InputText);
public void InputData() {
/* Keyboard Button Action */
KeyboardButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.v(TAG, "On Keyboard Button click event!");
InputEditText.requestFocus();
InputEditText.setFocusableInTouchMode(true);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(InputEditText, InputMethodManager.SHOW_FORCED);
}
});
}
それは誰かのために役立つかもしれません:)ありがとう!
あなたが説明したデザインはお勧めできません。ユーザーがfocusable
コンポーネントのテキストを変更できるかどうかを制御することではないEditText
属性の目的に違反しています。
ユースケースでこれが必要と思われるために代替の入力方法を提供する場合(たとえば、編集可能なテキストフィールドで特定の記号セットのみを許可する場合)、ユーザーが許可されていない間は、テキスト編集を完全に無効にする必要があります。フィールドの値を変更します。
編集可能なフィールドを宣言します。
_<EditText
Android:id="@+id/edit_text_2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ems="10" />
_
そのfocusable
属性はデフォルト値のままであることに注意してください。大丈夫です。後で処理します。編集プロセスを開始するボタンを宣言します。
_<Button
Android:id="@+id/button_show_ime"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Start editing" />
_
さて、あなたのActivity
で宣言します:
_private EditText editText2;
private KeyListener originalKeyListener;
private Button buttonShowIme;
_
そしてonCreate()
でこれを行います:
_@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ime_activity);
// Find out our editable field.
editText2 = (EditText)findViewById(R.id.edit_text_2);
// Save its key listener which makes it editable.
originalKeyListener = editText2.getKeyListener();
// Set it to null - this will make the field non-editable
editText2.setKeyListener(null);
// Find the button which will start editing process.
buttonShowIme = (Button)findViewById(R.id.button_show_ime);
// Attach an on-click listener.
buttonShowIme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Restore key listener - this will make the field editable again.
editText2.setKeyListener(originalKeyListener);
// Focus the field.
editText2.requestFocus();
// Show soft keyboard for the user to enter the value.
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText2, InputMethodManager.SHOW_IMPLICIT);
}
});
// We also want to disable editing when the user exits the field.
// This will make the button the only non-programmatic way of editing it.
editText2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// If it loses focus...
if (!hasFocus) {
// Hide soft keyboard.
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText2.getWindowToken(), 0);
// Make it non-editable again.
editText2.setKeyListener(null);
}
}
});
}
_
すべてのコメントを含むコードが自明であることを願っています。 API8および17でテスト済み。
LinearLayout ll_about_me =(LinearLayout) view.findViewById(R.id.ll_about_me);
ll_about_me.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
mEtEmpAboutYou.requestFocus();
mEtEmpAboutYou.setFocusableInTouchMode(true);
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mEtEmpAboutYou, InputMethodManager.SHOW_FORCED);
return true;
}
});
ボタンをクリックしたときにキーボードを開くためのこのコードを使用しています。お気に入り 。
btn1 = (Button) findViewById(R.id.btn1);
edt1 = (EditText) findViewById(R.id.edt1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
edt1.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edt1, InputMethodManager.SHOW_IMPLICIT);
}
});
その完成した仕事。
fragmentsを使用する場合は、次のようにInputMethodManager
を使用できます。
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
}
完全なコード:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
}
}
});
この助けを願っています
EditText txt_categorie = findViewById(R.id.txt_categorie);
txt_categorie.requestFocus();