5

我有一个包含一些 EditTexts 的活动。当我单击 EditText 以更改其中的文本时,会在光标出现的位置下方出现一个蓝色箭头。我怎样才能阻止这个出现?

恼人的蓝色箭头示例

4

4 回答 4

9

正如 MarvinLabs 所指出的,它是 Android SDK 中的一组可绘制对象。但是它们可以被覆盖。

  1. 在您的 sdk 平台中找到这些图像:

    • text_select_handle_left.png
    • text_select_handle_middle.png
    • text_select_handle_right.png
  2. 将它们复制到您的 drawables 文件夹,以便您有一个本地副本可供参考。您可以更改它们的颜色,使它们为空,或任何您想要的。请注意,正如 MarvinLabs 所说,完全删除它们可能并不明智,因为它们帮助用户选择文本进行剪切和复制。

  3. 如果您尚未在您的 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,但你明白了)

于 2013-11-15T01:57:41.087 回答
2

该指针是一个系统助手,允许用户轻松移动光标(比仅仅通过触摸 EditText 更精确)。所以我不知道你是否可以删除它,但我相信这不是一个好主意。

此外,这种指针的样式会根据设备而有所不同。如果您查看 SDK 的 android 源代码,您会发现一些名为 text_select_handle_XXX.png 的可绘制对象,我想您会从中找到如何在您自己的主题中更改系统样式。

于 2012-10-16T08:21:25.347 回答
1

我很确定这只发生在特定的 API 或设备上。它在其他应用程序上的工作方式也可能不同。最终,我看不到任何真正的方法来禁用设备原生的东西。此外,那里的设备非常庞大,因此即使您找到方法,您也很难禁用它。

于 2012-10-16T08:20:02.877 回答
0

您可以使用自定义的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;
    }

}
于 2017-05-04T12:48:33.727 回答