android - 带有不可编辑/不可取消后缀的 EditText

标签 android parsing android-edittext material-design fixed

<分区>

我为我的一个 Activity 创建了一个布局,用户可以在其中的某个 EditText 小部件中插入一个值。我需要其中一些 EditText 必须具有不可编辑的后缀(如 cm、mm 等)。 用户插入值后,我将解析这些 EditText 的内容,避免使用后缀,因此我将处理唯一没有后缀的输入。如何做到这一点?

我已经在 SO 上进行了搜索,但没有任何帮助。 我找到了这样的答案 https://stackoverflow.com/a/20794581/2516399这对我没有帮助。

我希望我的问题很清楚......对不起我的英语

最佳答案

这是我的解决方案:一个在文本后面绘制后缀的 EditText 类。有两个自定义属性用于定义后缀的文本和后缀填充(到 EditText 的左上角)。

public class EditTextWithSuffix extends EditText {
    TextPaint textPaint = new TextPaint();
    private String suffix = "";
    private float suffixPadding;

    public EditTextWithSuffix(Context context) {
        super(context);
    }

    public EditTextWithSuffix(Context context, AttributeSet attrs) {
        super(context, attrs);
        getAttributes(context, attrs, 0);
    }

    public EditTextWithSuffix(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        getAttributes(context, attrs, defStyleAttr);
    }

    @Override
    public void onDraw(Canvas c){
        super.onDraw(c);
        int suffixXPosition = (int) textPaint.measureText(getText().toString()) + getPaddingLeft();
        c.drawText(suffix, Math.max(suffixXPosition, suffixPadding), getBaseline(), textPaint);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        textPaint.setColor(getCurrentTextColor());
        textPaint.setTextSize(getTextSize());
        textPaint.setTextAlign(Paint.Align.LEFT);
    }

    private void getAttributes(Context context, AttributeSet attrs, int defStyleAttr) {
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.EditTextWithSuffix, defStyleAttr, 0);
        if(a != null) {
            suffix = a.getString(R.styleable.EditTextWithSuffix_suffix);
            if(suffix == null) {
                suffix = "";
            }
            suffixPadding = a.getDimension(R.styleable.EditTextWithSuffix_suffixPadding, 0);
        }
        a.recycle();
    }
}

这是属性定义:

<resources>
    <declare-styleable name="EditTextWithSuffix">
        <attr name="suffix" format="string|reference" />
        <attr name="suffixPadding" format="dimension" />
    </declare-styleable>
</resources>

关于android - 带有不可编辑/不可取消后缀的 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28703686/

相关文章:

android - 从代码中调用 ActionBar 的向上按钮按下

android - robolectric 2 - 创建有 Intent 的测试 Activity

android - 如何在 AlertDialog 框中添加两个编辑文本字段或 View ?

android - Android项目依赖管理状态

java - 使用 OData v4 语法解析器

objective-c - 使用 JSONKit 解析 JSON 文件

linux - 从文件中解析字符串并设置为变量 - Shell 脚本

android - 以编程方式添加的 EditText 与 XML 版本不同

android - 创建具有类似标签功能的自定义 editText

android - 使用 HashMap<String,List<String>> 创建 ExpandableListView 时出错