zoukankan      html  css  js  c++  java
  • 华为手机Edittext光标(cursor)颜色修改

    华为手机的emui系统经常让人发出“可以可以,这很华为”的感叹

    这两天在edittext部分也发生了这样的事情

    正常edittext光标的颜色和宽度都说可以修改的,只需要通过xml中的 textCursorDrawable 属性就可以实现

    但是到了华为手机上就直接会被系统默认一种很丑的光标风格覆盖

    正常的方法都不管用,于是翻源码看到edittext的父类textview中的“mCursorDrawableRes”域是负责从xml文件中获取你通过 textCursorDrawable 设置的光标drawable

    于是尝试简单粗暴地使用反射的方式对其进行修改,如下:

    public class HWEditText extends EditText {
    
        public HWEditText(Context context) {
            this(context,null);
        }
    
        public HWEditText(Context context, AttributeSet attrs) {
            super(context, attrs);
            modifyCursorDrawable(context,attrs);
        }
    
        public HWEditText(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            modifyCursorDrawable(context,attrs);
        }
    
        private void modifyCursorDrawable(Context context, AttributeSet attrs){
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HWEditText);
            int drawable = a.getResourceId(R.styleable.HWEditText_textCursorDrawable,0);
            if(drawable != 0) {
                try {
    
                    Field setCursor = TextView.class.getDeclaredField("mCursorDrawableRes");
                    setCursor.setAccessible(true);
                    setCursor.set(this, drawable);
    
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }
            }
            a.recycle();
        }
    }

    run一下发现此方法奏效 

    之后把这个类改成了适配增强类,同时给了一个自定义属性,可以在xml定义一个同名自定义属性对cursor进行修改,另外再把其他手机适配的几个小问题加进去了

  • 相关阅读:
    安卓第一夜 第一个应用
    为什么要学习Linux
    Android的历史与花边
    来玩Play框架07 静态文件
    来玩Play框架06 用户验证
    来玩Play框架05 数据库
    来玩Play框架04 表单
    来玩Play框架03 模板
    来玩Play框架02 响应
    来玩Play框架01 简介
  • 原文地址:https://www.cnblogs.com/bellkosmos/p/5779759.html
Copyright © 2011-2022 走看看