見つかり2つのソリューション - のEditTextのある領域でユーザーがクリックが、私は、ダイアログをポップアップする場合に選択答えは、ダイアログをポップアップ
を参照してください。私はクリックをキャプチャするためにonClickを使いました。これは部分的に機能します:ユーザが初めてEditTextをタップすると、ソフトキーボードがポップアップし、ダイアログは表示されません。その後のタップがキーボードを起動し、ダイアログ(そしてキーボードが消える)。
これは、EditTextがフォーカスを得ることと関係があると思われます。ここで
は、コードスニップです:
public class PrefixEditText extends EditText implements TextWatcher, OnClickListener
{
public PrefixEditText (Context context)
{
super (context);
setOnClickListener (this);
}
@Override
public void onClick(View v)
{
int selStart = getSelectionStart();
if (selStart < some_particular_pos)
bring_up_dialog();
}
}
重要:私は完全に正常のEditText動作を無効にしたくありません。私は、ユーザーが領域選択を行うことができるようにしたい(コピー&ペースト用)。私はおそらくそれがフォーカスを得るために(物理的なキーボードを持つ人々がアプリケーションを使用するとき、私はモデルを壊すことはありません)。そして、クリックがカーソル位置を設定しても構いません。したがって、onTouchをオーバーライドし、EditTextのすべてのonTouchアクションをブロックするソリューションは、私のためには機能しません。
更新日私はもう少し発見しました。 EditTextがフォーカスを得ている場合、onFocusChangeが呼び出され、onClickは呼び出されません。既にフォーカスがある場合、onClickは呼び出され、onFocusChangeは呼び出されません。第二に、それはonFocusChangeにそう
setInputType (InputType.TYPE_NULL);
を呼び出すことにより、キーボードを非表示にすることも可能
をの作品 - キーボードが現れることはありません。 onClick(キーボードがクリックされる前に隠れていることを前提としています)は明らかに遅すぎます - キーボードが現れて消えます。
次のアイデアは、オンタッチ時にキーボードを非表示にすることです。しかし、私はそのコードを混乱させるのが怖いです - 私が理解していることは、将来のバージョンのEditTextに関しては非常に壊れやすいと思われます。
これについて何か考えていますか?
は、あなたが何を考えていると、わずかな洞察を提供してもらえますか?ありがとう。 –
最初にe.setFocusable(false)でフォーカスをfalseに設定し、onclick関数でダイアログを表示した後にフォーカスできるようにするため、ポップアップは期待どおりに進みます –
大きな違いはありません。それはまだ最初に失敗し、その後のタップでキーボードをポップアップします。私はダイアログを作成する呼び出しの周りにsetFocusable呼び出しをすぐに配置します。 –