You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何实现提示文本正常、输入文本加粗?

解决EditText输入文本加粗、提示文本正常的问题

直接给EditText设置android:textStyle="bold"会同时影响输入文本和提示文本,因为提示文本默认继承EditText的文本样式,你之前给string资源加style的方式无效,是因为EditText的样式优先级更高。下面提供两种可行方案:

方案一:通过TextWatcher动态设置输入文本样式

  1. XML布局中定义EditText,不设置全局textStyle:
<EditText
    android:id="@+id/editTextPassword"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/password_hint" />

对应的string资源保持普通格式:

<string name="password_hint">Password</string>
  1. 在代码中添加文本变化监听,当有输入时给文本设置加粗样式:
EditText editText = findViewById(R.id.editTextPassword);
editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s.length() > 0) {
            SpannableString spannable = new SpannableString(s);
            spannable.setSpan(new StyleSpan(Typeface.BOLD), 0, s.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            editText.setText(spannable);
            editText.setSelection(s.length()); // 保持光标在文本末尾
        }
    }

    @Override
    public void afterTextChanged(Editable s) {}
});

方案二:自定义EditText重写绘制逻辑

适合需要全局复用该样式的场景:

public class BoldInputEditText extends EditText {
    public BoldInputEditText(Context context) {
        super(context);
        init();
    }

    public BoldInputEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public BoldInputEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        // 设置输入文本默认加粗
        setTypeface(getTypeface(), Typeface.BOLD);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Paint paint = getPaint();
        paint.save();
        // 强制提示文本使用正常样式
        paint.setTypeface(Typeface.DEFAULT);
        // 绘制提示文本
        super.onDraw(canvas);
        // 恢复画笔样式,保证输入文本仍为加粗
        paint.restore();
    }
}

在XML中使用自定义EditText:

<com.yourpackagename.BoldInputEditText
    android:id="@+id/editTextPassword"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/password_hint" />

内容的提问来源于stack exchange,提问作者biipek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:53:23