【问题标题】:How can the on-screen text selection widget be changed?如何更改屏幕上的文本选择小部件?
【发布时间】:2011-08-09 08:41:44
【问题描述】:
我注意到不同的 Android 应用程序有不同的文本选择方法。如果您在浏览器中单击并按住,则会出现文本的特写,并且可以拖动左右边缘来修改选择。在 Gmail 应用程序中,光标下方会出现一个蓝色大圆圈,便于移动。
相比之下,EditText 框中的默认文本选择小部件非常原始。怎么改?
更新:我忘了说可编辑是错误的。当 editable 为 true 时,文本选择器很好。
附言屏幕上的文本选择器的正确名称是什么?
【问题讨论】:
标签:
android
input
android-edittext
selection
【解决方案1】:
从 Android 3.0(API 级别 11)开始,您可以在任何 TextView 上设置 android:textIsSelectable 属性以使其文本可选。撰写本文时的默认 UI 类似于您为浏览器引用的行为。
编辑:此外,默认的 Android 浏览器使用自己的独立于系统的文本选择机制,类似于 Gingerbread 中的默认文本选择句柄。 “蓝色圆圈”听起来像是手机制造商添加的自定义界面。
【解决方案2】:
我会将其实现为扩展EditText 并实现LongClickListener 和ClickListener 的自定义类。然后你就可以完全控制了。
这只是伪代码,并为您指明正确的方向:
public class PrettySelectionEditText extends EditText implements OnLongClickListener, OnClickListener
{
private boolean isSelecting = false;
public PrettySelectionEditText(Context context)
{
super(context);
}
@Override
public boolean onLongClick(View v)
{
if (clickIsOnText)
{
isSelecting = true;
//Highlight word and pretty controls
}
//Select here based on the text they've clicked on?
//Return true if you want to consume the longClick
return true;
}
@Override
public void onClick(View v)
{
//If in selection mode
if (isSelecting)
{
//check where they've clicked
if (clickIsInSelect)
{
updateSelection(click);
}
else
{
isSelecting = false;
}
}
}
}
【解决方案4】:
如果这仅仅是无法突出显示不可编辑文本的问题,您可以使用XML 属性
android:textIsSelectable="true"
对于那个EditText 框。
来自安卓website:
android:textIsSelectable="true" 表示可以选择不可编辑文本的内容。
至于您关于术语的问题,我将其称为光标。