Android-Как я могу показать выделение текста на просмотр текста?
Я реализую приложение для чтения epub, где я использую textview для показа текста epub. Я хочу выделять текст из текстового представления, когда пользователь долго нажимает на текстовое представление, а затем выполняет несколько операций с выделенным текстом текстового представления, например выделение и т. Д. Итак, как я могу показать эти курсоры пользователю, чтобы выбрать текст по своему желанию.
* Я не хочу использовать EditText и сделать его похожим на textview. Может быть предпочтительнее переопределение textview.
* Я приложил скриншот, чтобы объяснить, что я ищу-
2 ответа
Об этом спрашивают давным-давно, когда у меня тоже была эта проблема. Я сделал Selectable TextView самостоятельно для своего собственного приложения Jade Reader. Я принимал решение для GitHub. (Код в BitBucket связан с приложением, но он более полный и отлаженный.)
Выбираемый TextView (на GitHub)
Нефритовый ридер (на BitBucket)
Использование следующего кода сделает ваш TextView доступным для выбора.
package com.zyz.mobile.example;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
public class MainActivity extends Activity {
private SelectableTextView mTextView;
private int mTouchX;
private int mTouchY;
private final static int DEFAULT_SELECTION_LEN = 5;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// make sure the TextView's BufferType is Spannable, see the main.xml
mTextView = (SelectableTextView) findViewById(R.id.main_text);
mTextView.setDefaultSelectionColor(0x40FF00FF);
mTextView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showSelectionCursors(mTouchX, mTouchY);
return true;
}
});
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mTextView.hideCursor();
}
});
mTextView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mTouchX = (int) event.getX();
mTouchY = (int) event.getY();
return false;
}
});
}
private void showSelectionCursors(int x, int y) {
int start = mTextView.getPreciseOffset(x, y);
if (start > -1) {
int end = start + DEFAULT_SELECTION_LEN;
if (end >= mTextView.getText().length()) {
end = mTextView.getText().length() - 1;
}
mTextView.showSelectionControls(start, end);
}
}
}
Это зависит от минимальной версии Android, которую вы хотите поддерживать.
В 3.0+ у вас есть атрибут textIsSelectable в TextView, который включает это поведение. Например:
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:padding="@dimen/padding_medium"
android:text="@string/hello_world"
android:bufferType="spannable"
android:textIsSelectable="true"
android:textSize="28dip"
tools:context=".MainActivity" />
Ниже, вам лучше всего использовать EditText, который выглядит и ведет себя как TextView (не считая "сплетения"). Или вы можете реализовать эту функцию самостоятельно, используя пролеты.