1

より具体的には、この動作の小さな例を示しました。

レイアウト:

  <ScrollView
        android:id="@+id/scroll_view_for_et"
        android:scrollbars="horizontal"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent">

        <EditText
            android:id="@+id/edit_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="top"
            android:text="Long text there" />
    </ScrollView>

アクティビティ:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText editText = (EditText) findViewById(R.id.edit_text);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            //Adding random span to text
            editText.getEditableText().setSpan(new ForegroundColorSpan(Color.RED), 100, 500, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }, 7000);
}

したがって、ある場所にカーソルを設定してから、テキストを別の位置にスクロールすると、7 秒が経過するとカーソルの位置にスクロールして戻ります。この動作を回避するにはどうすればよいですか?

この例の完全なコードのBitBucket リンク。

4

1 に答える 1

0

私はいくつかの解決策を見つけました。メソッドの実行後に EditText がフォーカスを受け取るという問題がありましたsetSpan。したがってandroid:descendantFocusability="beforeDescendants"、ビュー階層の親要素 (私の場合は LinearLayout) に追加し、OnTouchListener を ScrollView に追加しました。

mScrollViewAroundEt.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if (mCustomEditText.hasFocus()) {
            mCustomEditText.clearFocus();
        }

        return false;
    }
});

そのため、ユーザーがスクロールしても EditText はフォーカスを受け取りません。

于 2013-09-06T09:09:24.783 に答える