我有一个包含一些 EditTexts 的活动。当我单击 EditText 以更改其中的文本时,会在光标出现的位置下方出现一个蓝色箭头。我怎样才能阻止这个出现?
4 回答
正如 MarvinLabs 所指出的,它是 Android SDK 中的一组可绘制对象。但是它们可以被覆盖。
在您的 sdk 平台中找到这些图像:
- text_select_handle_left.png
- text_select_handle_middle.png
- text_select_handle_right.png
将它们复制到您的 drawables 文件夹,以便您有一个本地副本可供参考。您可以更改它们的颜色,使它们为空,或任何您想要的。请注意,正如 MarvinLabs 所说,完全删除它们可能并不明智,因为它们帮助用户选择文本进行剪切和复制。
如果您尚未在您的 styles.xml 中定义自定义主题,请定义一个。然后将这些项目添加到其中:
_
<style name="CustomTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:textSelectHandleLeft">@drawable/text_select_handle_left</item>
<item name="android:textSelectHandleRight">@drawable/text_select_handle_right</item>
<item name="android:textSelectHandle">@drawable/text_select_handle_middle</item>
</style>
前:
后:
(不同的EditTexts,但你明白了)
该指针是一个系统助手,允许用户轻松移动光标(比仅仅通过触摸 EditText 更精确)。所以我不知道你是否可以删除它,但我相信这不是一个好主意。
此外,这种指针的样式会根据设备而有所不同。如果您查看 SDK 的 android 源代码,您会发现一些名为 text_select_handle_XXX.png 的可绘制对象,我想您会从中找到如何在您自己的主题中更改系统样式。
我很确定这只发生在特定的 API 或设备上。它在其他应用程序上的工作方式也可能不同。最终,我看不到任何真正的方法来禁用设备原生的东西。此外,那里的设备非常庞大,因此即使您找到方法,您也很难禁用它。
您可以使用自定义的EditText
. 您需要创建一个自定义MovementMethod
实现,一个canSelectArbitrarily()
返回 false 的实现。然后您只需覆盖EditText.getDefaultMovementMethod()
以返回您的CustomMovementMethod
:
public class MyEditText extends EditText {
private CustomMovementMethod customMovementMethod = new CustomMovementMethod();
@Override
public MovementMethod getDefaultMovementMethod() {
return customMovementMethod;
}
}
private class CustomMovementMethod implements MovementMethod {
@Override
public boolean canSelectArbitrarily() {
return false;
}
@Override
public void initialize(TextView widget, Spannable text) {
// TODO Auto-generated method stub
}
@Override
public boolean onGenericMotionEvent(TextView widget, Spannable text, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onKeyOther(TextView view, Spannable text, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onKeyUp(TextView widget, Spannable text, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onTakeFocus(TextView widget, Spannable text, int direction) {
// TODO Auto-generated method stub
}
@Override
public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onTrackballEvent(TextView widget, Spannable text, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
}