如何在 Android 中以编程方式选择或突出显示 TextView?
How to selected or highlight TextView programmatically in Android?
目前,我正在开发一个阅读小应用。有一个文本视图来显示文本。我们可以为文本添加书签并存储在列表视图中。我想从列表视图中单击并突出显示或 select 文本视图中的书签索引。我可以得到 bookmark_index
。有没有像textview.setSelect(Start,Length)
这样的方法?或者任何图书馆都可以做到吗?感谢
请查看图片以了解我的想法。
使用 Spannable
Spannable WordtoSpan = new SpannableString("partial colored text");
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), startIndex, stopIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(WordtoSpan);
这取决于您希望支持的最低 Android 版本。
在 3.0+(API 级别 11 及更高版本)上,TextView 具有 textIsSelectable 属性,可启用此行为。例如:
<TextView
android:id="@+id/deviceIdTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:text="" />
或者您可以使用如下所示的 span 自行实现此功能。
TextView myTV = (TextView)findViewById(R.id.textView1);
String textString = "Whosebug Rocks!!!";
Spannable spanText = Spannable.Factory.getInstance().newSpannable(textString);
spanText.setSpan(new BackgroundColorSpan(0xFFFFFF00), 14, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
myTV.setText(spanText);
也许此解决方案可以帮助您配置菜单或文本选择。
我希望文本可以选择(用于复制和粘贴)或希望其他手势起作用。
- 在布局文件中或以编程方式将 textIsSelectable 设置为 false。
- 使用您的手势在文本视图上设置一个 onTouchListener。
- 允许其中一种手势切换到文本选择模式。见下文。
如何以编程方式设置textSelection?
- 将 textIsSelectable、focusable、longPressable 设置为 true
- 将 onTouchListener 设置为空。
- 安装点击侦听器以切换回正常手势/菜单。
1) 安装您的 GestureHandler:
// Create your Touch Listener
onTouchListener = new OnSwipeTouchListener(mCtx, this);
view.setOnTouchListener( onTouchListener);
2) 切换到文本选择方式:
// Create your popup with an menu option to switch to textselection modus:
PopupMenu popup = new PopupMenu(mCtx, view);
popup.inflate(R.menu.text_options_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case ...
case R.id.text_textisselectable:
view.setOnTouchListener(null);
((TextView)view).setTextIsSelectable( true);
((TextView)view).setFocusable( true);
((TextView)view).setLongClickable( true);
// Install a click listener to switch back to the previous Touch Listener
((TextView)view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupx = new PopupMenu(mCtx, view);
popupx.inflate(R.menu.selecttext_back_menu);
popupx.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
((TextView)view).setTextIsSelectable( false);
((TextView)view).setFocusable( false);
((TextView)view).setLongClickable( false);
view.setOnTouchListener(onTouchListener);
return true;
}});
popupx.show();
}
});
break;
以上所有解决方案都不适合我。
然后我在 XML 中添加了 android:textIsSelectable="true"
,但是没有用。
它的工作原理是添加textView.setTextIsSelectable(true)
在您的 activity 或片段或适配器中。
目前,我正在开发一个阅读小应用。有一个文本视图来显示文本。我们可以为文本添加书签并存储在列表视图中。我想从列表视图中单击并突出显示或 select 文本视图中的书签索引。我可以得到 bookmark_index
。有没有像textview.setSelect(Start,Length)
这样的方法?或者任何图书馆都可以做到吗?感谢
请查看图片以了解我的想法。
使用 Spannable
Spannable WordtoSpan = new SpannableString("partial colored text");
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), startIndex, stopIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(WordtoSpan);
这取决于您希望支持的最低 Android 版本。
在 3.0+(API 级别 11 及更高版本)上,TextView 具有 textIsSelectable 属性,可启用此行为。例如:
<TextView
android:id="@+id/deviceIdTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:text="" />
或者您可以使用如下所示的 span 自行实现此功能。
TextView myTV = (TextView)findViewById(R.id.textView1);
String textString = "Whosebug Rocks!!!";
Spannable spanText = Spannable.Factory.getInstance().newSpannable(textString);
spanText.setSpan(new BackgroundColorSpan(0xFFFFFF00), 14, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
myTV.setText(spanText);
也许此解决方案可以帮助您配置菜单或文本选择。
我希望文本可以选择(用于复制和粘贴)或希望其他手势起作用。
- 在布局文件中或以编程方式将 textIsSelectable 设置为 false。
- 使用您的手势在文本视图上设置一个 onTouchListener。
- 允许其中一种手势切换到文本选择模式。见下文。
如何以编程方式设置textSelection?
- 将 textIsSelectable、focusable、longPressable 设置为 true
- 将 onTouchListener 设置为空。
- 安装点击侦听器以切换回正常手势/菜单。
1) 安装您的 GestureHandler:
// Create your Touch Listener
onTouchListener = new OnSwipeTouchListener(mCtx, this);
view.setOnTouchListener( onTouchListener);
2) 切换到文本选择方式:
// Create your popup with an menu option to switch to textselection modus:
PopupMenu popup = new PopupMenu(mCtx, view);
popup.inflate(R.menu.text_options_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case ...
case R.id.text_textisselectable:
view.setOnTouchListener(null);
((TextView)view).setTextIsSelectable( true);
((TextView)view).setFocusable( true);
((TextView)view).setLongClickable( true);
// Install a click listener to switch back to the previous Touch Listener
((TextView)view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupx = new PopupMenu(mCtx, view);
popupx.inflate(R.menu.selecttext_back_menu);
popupx.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
((TextView)view).setTextIsSelectable( false);
((TextView)view).setFocusable( false);
((TextView)view).setLongClickable( false);
view.setOnTouchListener(onTouchListener);
return true;
}});
popupx.show();
}
});
break;
以上所有解决方案都不适合我。
然后我在 XML 中添加了 android:textIsSelectable="true"
,但是没有用。
它的工作原理是添加textView.setTextIsSelectable(true)
在您的 activity 或片段或适配器中。