【问题标题】:Android, how do I stop a pointer appearing below an EditTextAndroid,如何停止出现在 EditText 下方的指针
【发布时间】:2012-10-16 08:18:05
【问题描述】:

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

【问题讨论】:

标签: android android-edittext


【解决方案1】:

正如 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 但你明白了)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-05
          • 2017-05-05
          • 2017-11-22
          • 1970-01-01
          • 2014-08-07
          • 1970-01-01
          • 1970-01-01
          • 2021-09-30
          相关资源
          最近更新 更多