51

ソフトキーボードについて教えてください。たとえば、Activity、dialogfragment、fragmentactivity などに EditText があります。ここにあります:

<EditText
    android:id="@+id/edPswrd"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPassword" >

    <requestFocus />
</EditText>

初めて表示されるときは、ソフト キーボードが表示されず、フォーカスを受け取るために editText を押す必要があり、キーボードが表示されます。別のアクティビティは異なります。画面に表示されると、キーボードは何の助けもなしに読み込まれます。と思いました

< requestFocus />

EditText がフォーカスされ、キーボードが表示されることを意味しますが、私は間違っています。

どのコンポーネントがフォーカスを受け取り、キーボードが自動的に表示されるかを管理するにはどうすればよいですか。

4

9 に答える 9

75

最初はソフト キーボードで全体のアクティビティを覆い隠すことなく、アクティビティ全体を表示しようとするバグまたは機能だと思います。私はそれに関する情報を一度検索しましたが、残念ながら、本当に信頼できる情報源からのものは何も見つかりませんでした.

とにかく、ソフト キーボードを表示するには、次のようにします。

EditText editText = (EditText)findViewById(R.id.edit_text_id);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

アクティビティの開始直後にソフトキーボードを強制的に表示する次のコードも見ましたが、試したことはありません。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

ソフト キーボードを非表示にする場合は、次のようにします。

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

それが役立つことを願っています。

編集:

これは機能するDialogFragmentはずです:onCreateView()メソッドでこれを行います:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_id, container);
    EditText editText = (EditText)view.findViewById(R.id.edit_text_id);

    // show soft keyboard
    editText.requestFocus();
    getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

    return view;
}
于 2013-02-07T19:37:37.193 に答える
32

Android マニフェスト ファイルを開きます。

このような活動タグを探します

<activity  
        android:name="com.example.framework.MainActivity"
        android:label="@string/app_name" 
        android:windowSoftInputMode="stateVisible"       //Add this line    
         >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

上記のように android:windowSoftInputMode="stateVisible" という行を追加します

于 2013-02-07T19:33:42.500 に答える
18

これはすでに回答されていることは知っていますが、受け入れられた回答をonCreateDialogではなく で行う方法を見つけましたonCreateView。ビルダーを終了したら、戻る前に次のことを行います。

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());  
// blah blah blah do builder stuff here like setTitle, setView, etc

Dialog d = builder.create();

重要な部分は次のとおりです。

d.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
return d;
于 2015-04-28T15:33:31.570 に答える
9

onCreate または onStart() に追加します。

myView.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
于 2013-02-07T19:32:31.943 に答える
5

これを試して

@Override
public void onResume() {
   super.onResume();
   final View v = getDialog().findViewById(R.id.edit_text_id);
   v.post(new Runnable() {
      @Override
      public void run() {
        v.requestFocus();
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
      }
   });
 }
于 2014-05-12T12:53:28.370 に答える
0

次のリンクをお勧めします。リンクの下に記載されている手順に従いましたが、完全に機能しており、非常に簡単な手順で実行できるかなり良い答えです。クレジットは回答者に与えられます。ダイアログアクティビティでキーボードポップアップを台無しにする人の助けになることを願っています。

DialogFragment と強制的にキーボードを表示する

于 2017-01-11T13:23:53.577 に答える
0

これは私のために働いたものです -

独自の EditText クラスを作成し、次のメソッドをオーバーライドします -

public class FocussableEditText extends EditText {

    public FocussableEditText(Context context) {
        super(context);
    }

    public FocussableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FocussableEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        if (hasWindowFocus) {
            InputMethodManager imm = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(this, InputMethodManager.SHOW_FORCED);
        }
    }
}

http://debuggingisfun.blogspot.in/2014/08/android-show-soft-keyboard.html

于 2016-09-23T10:32:58.487 に答える