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

Android输入长文本失焦后未从起始位置显示,求解决方案

Android输入框失焦后显示文本起始位置的解决方案

方案1:自定义EditText实现自动滚动

创建继承自EditText的自定义控件,重写onFocusChanged方法,在控件失去焦点时强制将光标定位到文本开头,控件会自动滚动到该位置:

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

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

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

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        if (!focused) {
            setSelection(0);
        }
    }
}

布局中直接使用这个自定义控件替换原生EditText即可。

方案2:给原生EditText添加焦点监听

如果不想自定义控件,可在代码中为EditText设置焦点变化监听器,在失焦时手动调整光标位置:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            ((EditText) v).setSelection(0);
        }
    }
});

补充说明

调整Gravity属性无效的原因:Gravity仅控制文本在控件内的对齐方式,无法影响文本过长时失焦后的滚动位置。系统默认会保留输入时的光标位置,通过setSelection(0)将光标移到开头,会触发控件自动滚动到文本起始部分,解决显示问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:22:43