1

現在、アプリケーションに直感的なインターフェイスを提供しようとしています。

正常に動作するロード時にキーボードをアクティブにする oncreate 関数があります。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_popup);
    reminder = (CheckBox)findViewById(R.id.reminder_option);
    addTask();
    taskField = (EditText)findViewById(R.id.task_name);
    taskField.setHorizontallyScrolling(true);
    taskField.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean focus) {
            if (focus) {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        }
    });
    taskField.requestFocus();

チェックボックスをクリックすると、キーボードが閉じられます

if(checked){
                imm.hideSoftInputFromWindow(taskField.getWindowToken(), 2);
                dateTitle.setVisibility(View.VISIBLE);
                dateSelector.setVisibility(View.VISIBLE);
                timeTitle.setVisibility(View.VISIBLE);
                timeSelector.setVisibility(View.VISIBLE);
                datetimesperator.setVisibility(View.VISIBLE);

私は 2 つの内部クラス、TimePickerFragment と DatePickerFragment の両方を onDate/TimesetListener を実装して使用しています。

問題は、ポップアップから時刻または日付を設定すると、キーボードが再びアクティブになることです。

アクティビティの起動時に EditText がフォーカスされないようにする から解決策を試みました

edittext からフォーカスを削除するためにレイアウトがフォーカス可能に設定されている場合、次のコードを if checked ステートメントに追加しました。RelativeLayout レイアウト = (RelativeLayout)findViewById(R.id.add_container); layout.requestFocus();

ただし、それぞれのダイアログで日付または時刻を設定した後、フォーカスが edittext 要素から離れているにもかかわらず、キーボードはアクティブのままです。

DatePickerDialog または TimePickerDialog を終了するときにキーボードがアクティブにならないようにするにはどうすればよいですか?

4

1 に答える 1

2

EditText に焦点を当てるのは難しいです。私の知る限り、EditText が自動的にフォーカスされるのを防ぐ実際の方法はありません。RelativeLayout へのフォーカスを要求するアプローチは、この問題の最良の解決策のようです。たとえそれが良い解決策でなくても、回避策のように感じます。

私のアドバイスは次のとおりです。可能であれば、この種のシナリオを回避するようにしてください。たとえば、ClickListeners を使用して、必要なことを達成してみてください。しかし、他に解決策がない場合は、フォーカスを受け取るべきではないビューがフォーカスを得るたびに、RelativeLayout にフォーカスをリクエストする必要があることに注意する必要があります。あなたのコードはダイアログの処理方法を示していないため、直接お手伝いすることはできませんが、ダイアログに関して必要なすべての情報がここにあります: http://developer.android.com/guide/topics/ui/dialogs. html

于 2013-07-06T10:27:56.803 に答える