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
相关产品推荐
相关产品推荐

