1

2 つの編集テキスト ビューがあります。最初にクリックすると、最初の編集テキストを選択し、2 番目の「00」に設定する必要があります。デフォルトのアンドロイドの目覚まし時計のように。私の問題:

  • 私はAPIレベル10を持っているので、次のようなものを書くことはできません:

firstEText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        secondEText.setText("00");
    }
});

私が使用する場合

firstEText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        secondEText.setText("00");
    }
});

ビューを 2 回クリックする必要があります。考えられる解決策:

firstEText.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View view, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {

            //but with onTouch listener I have problems with 
            //edit text selection:
            ((EditText) view).setSelection(0, ((EditText) view).getText().length());
        }
        return false;
    }
});

私の .setSelection は常に機能するとは限りません。ああ、神様!お願い助けて

4

1 に答える 1

6

私の理解が正しければ、次のことを実行してください。

  • フォーカスするときfirstETextは、その中のすべてのテキストを選択し、「00」firstETextに設定secondETextします。

私が理解できないのは、 API 1 以降でsetOnFocusChangeListener使用できるため、使用できないと言う理由です。

要素にフォーカスを移すときにEditTextのすべてのテキストを選択するための便利な属性はandroid:selectAllOnFocusです。次に、 「00」secondETextに設定するだけです。

UI

<EditText
    android:id="@+id/editText1"
    android:layout_width="180dp"
    android:layout_height="wrap_content"
    android:selectAllOnFocus="true"
    android:background="@android:color/white"
    android:textColor="@android:color/black" />

<EditText
    android:id="@+id/editText2"
    android:layout_width="180dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:background="@android:color/white"
    android:textColor="@android:color/black" />

アクティビティ

firstEText = (EditText) findViewById(R.id.editText1);
secondEText = (EditText) findViewById(R.id.editText2);

firstEText.setOnFocusChangeListener(new View.OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            secondEText.setText("00");
        }
    }

});

それが役に立てば幸い。

于 2013-07-01T21:45:14.153 に答える