首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对于editable = false,Android 4.0 EditText游标始终不可见

对于editable = false,Android 4.0 EditText游标始终不可见的问题,可以通过以下方式解决:

  1. 概念:editable属性用于指定EditText是否可编辑。当editable属性设置为false时,EditText将变为只读状态,用户无法编辑其中的文本内容。
  2. 问题原因:在Android 4.0版本中,当editable属性设置为false时,EditText的游标(光标)默认是不可见的,这可能导致用户无法准确地知道自己当前输入的位置。
  3. 解决方法:为了解决这个问题,可以通过以下两种方式之一来使EditText的游标可见:

a. 使用自定义的样式:可以通过在res/values/styles.xml文件中定义一个新的样式,并将android:textCursorDrawable属性设置为一个可见的游标资源。然后,在EditText的布局文件中将该样式应用到EditText上。

b. 使用反射:通过反射的方式来修改EditText的mCursorDrawableRes属性,将其设置为一个可见的游标资源。具体实现代码如下:

代码语言:java
复制
import java.lang.reflect.Field;

public class EditTextUtils {
    public static void setCursorVisible(EditText editText, boolean visible) {
        try {
            Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
            f.setAccessible(true);
            int cursorDrawableRes = f.getInt(editText);
            Field f1 = TextView.class.getDeclaredField("mEditor");
            f1.setAccessible(true);
            Object editor = f1.get(editText);
            Class<?> clazz = editor.getClass();
            Field f2 = clazz.getDeclaredField("mCursorDrawable");
            f2.setAccessible(true);
            Drawable[] drawables = new Drawable[2];
            drawables[0] = editText.getContext().getResources().getDrawable(cursorDrawableRes);
            drawables[1] = editText.getContext().getResources().getDrawable(cursorDrawableRes);
            if (!visible) {
                drawables[0].setAlpha(0);
                drawables[1].setAlpha(0);
            }
            f2.set(editor, drawables);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

然后,在需要使用EditText的地方,调用setCursorVisible方法并传入相应的参数即可控制游标的可见性。

  1. 应用场景:这个问题的解决方法适用于需要在Android 4.0版本中使用EditText,并且希望在只读状态下仍然显示游标的场景。
  2. 推荐的腾讯云相关产品和产品介绍链接地址:由于问题与云计算领域无关,因此不需要提供腾讯云相关产品和产品介绍链接地址。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

android studio输出文字_androiditem长按删除

EditText 实现 textView 长按复制效果,edittexttextview 首先 EditText 是集成 TextView 的 我们直接将?...EditText 设置为不可编辑来实现 其中重点为: android:background=”@null”//背景设为null,去掉editText下划线 android:textCursorDrawable...=”@null”//游标设为null,去掉游标 android:editable=”false”//不可编辑 android:textIsSelectable=”true”//文字内容可选 有时候可能会遇到...实现 textView 长按复制效果,edittexttextview 首先 EditText 是集成 TextView 的 我们直接将?...EditText 设置为不可编辑来实现 其中重点为:… 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。

57110

EditText 集锦 - 开发中常用的用法及遇到的各种坑

---- 常用的基本属性 该片段的内容来自于 重拾Android之路之EditText EditText属性(API 24) android:hint //设置hint提示文本 android:textColorHint...(带+ -号的整数).注意:该属性在使用时提示已过时,建议使用android:inputType属性替代. android:singleLine //设置是否单行输入 true(单行输入),false(.... android:background //设置EditText背景."...:editable //设置EditText是否可以编辑.当你设置为true,会提示你该EditText已经是可编辑的.设置为false时会提示使用inputType替代. android:inputType...:EditText设置密码可见与不可见 //从密码不可见模式变为密码可见模式(行得通) et_password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

2.3K20
  • 安卓应用安全指南 5.1 创建密码输入界面

    5.1 创建密码输入界面 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0...对于如何保存密码,未来会发布另一篇文章。 要点: 1) 输入的密码应该被屏蔽显示(用*显示) 2) 提供以纯文本显示密码的选项。 3) 警告用户以纯文本显示密码有风险。...; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.InputType...因此,密码纯文本显示的限制包含在示例代码中。 通过指定EditText的InputType,可以切换屏蔽显示和纯文本显示。...5.1.3.3 关于“使密码可见”设置 Android 设置菜单中有一个名为“使密码可见”的设置。 在 Android 4.4 的情况下,如下所示。

    1.1K20

    android 复制控件,Android长按复制文本功能

    :layout_width=”0dp” android:layout_height=”match_parent” android:layout_weight=”2″ android:background...=”@null”//背景设为null,去掉editText下划线 android:editable=”false”//不可编辑 android:textIsSelectable=”true”//文字内容可选...android:gravity=”right|center_vertical” android:lines=”1″ android:textColor=”@color/pub_color_black”...android:textCursorDrawable=”@null”//游标设为null,去掉游标 android:textSize=”@dimen/text_h16″ tools:text=”2382787482347...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.6K20

    Android开发之如何自定义数字键盘详解

    对于坐标区域的计算上面已经做了分析。 布局使用 <?xml version="1.0" encoding="utf-8"? <!...keyPreviewOffset是预览的偏移量,keyTextColor设置key字体颜色,shadowRadius我们一般设置为0,它表示字体的阴影,如果设置0.看起来回模糊。...除此之外,我们创建一个函数attachTo(EditText)将EditText与我们自定义的键盘绑定 fun attachTo(editText: EditText) { //如果editText与上次设置的是同一个对象...,则就不现实预览效果 mKeyBoardView.isPreviewEnabled = true //设置可见 mKeyBoardView.visibility = View.VISIBLE //指定键盘弹出动画...let { var editable: Editable = it.text var textString = editable.toString() //获取光标位置 var start = it.selectionStart

    3K21

    Android富文本开发

    对于上面两个问题,这个位置可以取光标所在的位置,但是对于一个EditText输入文本,插入图片这个位置可以分多种情况: 如果光标已经顶在了editText的最前面,则直接插入图片,并且EditText下移即可...获取焦点,但是弹出软键盘(也就是说光标显示第一个输入框,主动弹软键盘) 在第一个输入框的最直接父布局加入:android:focusable="true";android:focusableInTouchMode...="true" (效果:软键盘弹出,光标不显示,其他输入框也获取焦点,ps非直接父布局没有效果) android:windowSoftInputMode="stateAlwaysHidden" (效果...:软键盘弹出,光标显示在第一个输入框中) 需求2:editText获取焦点,当然软键盘不会主动弹出(光标也不显示) 在第一个输入框的最直接父布局加入:android:focusable="true"...;android:focusableInTouchMode="true" (效果:软键盘弹出,光标不显示,其他输入框也获取焦点,ps非直接父布局没有效果) 在父布局最顶部添加一个高度为0的EditText

    8.5K20

    Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    对于第一个问题,我在网上看到过一种思路。...4、微博的做法 4.1 侦听并处理光标活动、选中状态以及Span位置变化 对于光标活动和选中状态侦听,如果采用继承EditText的方式实现标签文本功能,重写onSelectionChanged(int...mBufferType = type;     setTextInternal(text);     ... } 由此可见,我们赋值给EditText的CharSequence对象先经过mEditableFactory...转换为Editable对象,最终被真正赋值给EditText,mEditableFactory的类型正是Editable.Factory,这是一个静态内部类。...setSpan(false, spans[ii], st, en, fl, false);         }         restoreInvariants();     } } 这就是轴承断掉的原因所在

    2.2K30

    Android开发笔记(一百四十八)自定义输入法软键盘

    2、自定义控件的主要工作是书写自定义的控件类,自定义软键盘也例外,有了自定义的控件类,才能处理十个数字键的按键动作,才能把软键盘做为普通的控件嵌入到其它布局文件中。...3、软键盘不是一个孤立的控件,它的按键动作需要实时在某个编辑框中把数字显示出来,所以在使用时还得给它绑定一个EditText,这样软键盘才知道我的按键要输出给这个EditText,而不是输出给那个EditText...mKeyboardView.setKeyboard(mKeyboard); mKeyboardView.setEnabled(true); mKeyboardView.setPreviewEnabled(false...(int primaryCode, int[] keyCodes) { Editable editable = et.getText(); int start = et.getSelectionStart...= null && editable.length() > 0) { if (start > 0) { editable.delete(start - 1, start);

    2.5K30

    Android开发笔记(一百四十六)仿支付宝的支付密码输入框

    编辑框EditText算是Android的一个基础控件了,表面上看,EditText只负责接收用户手工输入的文本;可实际上,要把这看似简单的文本输入做得方便易用,并不是一个简单的事情...,后来又在Android5.0以后提供了文本输入布局TextInputLayout。...对于处理密码输入的EditText来说,需要实现以下几项操作: 1、把默认的下划线背景替换为圆角背景,且支持在获得焦点时高亮显示; 2、屏蔽输入光标,可调用setCursorVisible方法设置为不可见...里的文本发生变更之时,相应更新TextView队列的各项文本显示; 上述的改造内容,大部分都有可以直接调用的函数,但有两个功能的实现要特别注意: 首先,对于密文字符,Android默认显示点号(·),...其次,对于支付密码输入框的焦点获得问题,因为该输入框内部集成了EditText,所以不管是给输入框注册点击事件还是触摸事件,手势焦点都会被内部的EditText所抢占,使得密码输入框反而不会响应点击和触摸事件

    1.9K30

    让你的EditText删除表情比微信更高效--记一次android性能分析优化实战

    前言 自己在做SpEditTool:一个支持表情,@mention,#话题#等功能的EditText控件,这个项目的时候出现了一个很奇怪的问题 EditText输入表情过多的时候,从中间开始删除表情,会出现非常卡的情况...: spDatas) { if (selectionStart == spData.end) { Editable editable = getText();...editable.delete(spData.start, spData.end); return true; } } return false; }...setEditableFactory(ImageEditableFactory.getInstance()); 自己的demo一跑果然无论从哪个位置删都不会卡顿了 总结 性能分析工具可以帮助自己快速定位问题,对于...android sdk这种不太好调试的代码更是事半功倍 解决问题的时候不要一味死磕,特别对于自己不熟悉的东西,有可能思路本身就是错的 对于一些私有的方法,用反射可以实现很多风骚操作~ 完整代码 最后 如果你觉得文章写得不错就给个赞呗

    1.4K30

    textview可复制_长按复制是怎么做的

    前段时间因为项目需求实现TextView长按复制的功能,特意上百度差了一下有不少实现这个功能的方法,隔了好久也怕忘了,总结一下: 先推荐目前感觉最好用的方法: 在布局文件的TextView控件属性中增加一句话:android...:textIsSelectable=”true”,不过这个方法需要只有android sdk 11起才支持,v11以下则不行了。...,和TextView一样在xml里面直接加一句话android:editable=”false” 可以实现,不过需要注意,使用EditText的话需要设置一个背景色,或者设置空也行,缺点是不能在java...被编辑 return false; } } 其中关键的一个方法是getDefaultEditable(),,return false;即禁止EditText被编辑,变成了不可编辑的EditText,...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.9K20

    详解EditText输入监听TextWatcher「建议收藏」

    日常开发中,我们可能会遇到需要监听EditText输入,比如判断输入是否为电话号码,获取输入的数据长度来限定字数等。这就需要监听EditText的输入状态。..."> <EditText android:id="@+id/phone_number" android:layout_width="368dp" android:layout_height=...对于 void afterTextChanged(Editable s): 官方解释: This method is called to notify you that, somewhere within...修改EditText的输入长度为15再试试: android:maxLength="15" 运行截图: 达到最大长度才显示了一下,我们可以推测到,他竟然递归调用了。。。...我们做自己的操作一般在这里; afterTextChanged();在你输入完成后执行,我们输入完后处于完成状态,他就监测到完成了就不断的执行,因为我们操作,是不是一直处于完成状态?

    3K31

    实现Android键盘的中英文适配

    android开发EditText输入时弹出数字输入键盘(适配英文环境) 首先设置只能输入数字 <EditText android:id="@+id/second_password" android...” 可见密码 android:inputType=”textWebEditText” 作为网页表单的文本 android:inputType=”textFilter” 文本筛选过滤 android:inputType...stateHidden:用户选择activity时,软键盘总是被隐藏 【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的 【E】stateVisible:软键盘通常是可见的...默认弹出软件键盘: 方法一: 在 AndroidMainfest.xml 中选择哪个 activity,设置windowSoftInputMode 属性为 adjustUnspecified|stateHidden...int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable

    2.2K10

    Android自定义支付密码输入框,光标问题总结!

    前言 在项目中我们常常继承AppCompatEditText或EditText自定义验证码输入框来代替系统输入框,以满足UI设计需求,如: 直线形输入框 方形输入框 | image.png...自定义验证码输入框后,EditText自带的光标对我们来说不可见,已经没有意义,因此需要将其隐藏掉,防止onDraw方法一直被调用 isCursorVisible = false 问题分析 问题1:是什么方法一直在不停的调用...Note that this property only      * makes sense for editable TextView....虽然EditText自带的光标已经不能满足我们的需求,但我们可以参考其光标闪烁的源码,然后修改一下来满足我们的需求,重点是修改光标绘制时的显示位置 在控件可见时开启光标闪烁,控件不可见时取消光标闪烁 override...欢迎关注我,分享Android干货,交流Android技术。 对文章有何见解,或者有何技术问题,欢迎在评论区一起留言讨论!

    1.4K20
    领券