59

edittext があり、ユーザーがこの edittext をクリックすると、アラート ダイアログが表示されます。
私のコードは次のとおりです。

            edt.setInputType(InputType.TYPE_NULL);
            edt.setFocusableInTouchMode(true);
            edt.requestFocus();

            edt.setCursorVisible(false);

            edt.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    CommentDialog.buildDialog(mContext, identifier, false, edt.getId());
                }
            });

ユーザーが edittext をクリックしたときにキーボードが表示されないようにしたいので、inputtype を TYPE_NULL に設定します。
しかし、編集テキストにフォーカスがなくてクリックすると、onClick イベントは実行されません。もう一度クリックすると、アラート ダイアログが正しく表示されます。

これを修正するにはどうすればよいですか?

4

9 に答える 9

134

これをXMLファイルに追加してみてください。widgetフォーカスを得ると、キーボードがポップアップします。したがって、この動作を防ぐには、 focusable を に設定しfalseます。その後、通常の使用OnClickListener

<EditText
  android:focusable="false"
  ...
/>

これで、動作するはずです。

于 2012-09-24T07:30:49.197 に答える
24

onTouchの代わりに使用できるため、にフォーカスがonClickあるかどうかは関係ありません。EditText

edt.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) { 
        CommentDialog.buildDialog(mContext, identifier, false, edt.getId());                    
        return false;
    }
});
于 2012-09-24T07:29:46.590 に答える
7

あなたがしなければならないことは何もありません

edt.setFocusable(false);
于 2012-09-24T07:40:13.657 に答える
7

focusableInTouchMode が true の場合、タッチは 2 回目のタッチでのみトリガーされるため、その場合を除き、focusableInTouchMode には false を使用します。そして、ビューセット focusable true でフォーカス可能性を有効にしたい場合

<EditText android:focusable="true"  android:focusableInTouchMode="false" ... />
于 2014-07-01T11:28:38.130 に答える
5

アラート ダイアログボックスを表示する

setOnFocusChangedListener()

于 2012-09-24T07:30:37.057 に答える
3

FocusChangeListener本当に必要のないとき (たとえば、アクティビティに入るとき) に不規則に動作するため、 a の使用は避けてください。OnTouchListener次のように設定するだけOnClickListenerです:

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                view.requestFocus();
                break;
        }
        return false;
    }

これによりEditText、onClick 呼び出しの前にフォーカスを受け取ることができます。

于 2016-11-07T19:33:47.110 に答える
3

onFocusChangeListener を追加する必要があります。

edt.setKeyListener(null);
edt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus)
        {
            edt.callOnClick();
        }
    }
});
edt.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        CommentDialog.buildDialog(mContext, identifier, false, edt.getId());
    }
});
于 2016-10-03T22:52:58.967 に答える
1

キーボードが必要ない場合は、入力タイプを設定する代わりに、"Editable=false" と "Focus=false" を使用します。

それはあなたに役立つかもしれません。

于 2012-09-24T07:30:28.543 に答える