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

Android EditText长文本省略显示+点击可编辑且光标置尾方案咨询

嘿,这个场景我太熟了!Android原生EditText确实在「文本过长显示省略号」和「可编辑切换」之间存在兼容性问题——要么能显示省略但点不动,要么能编辑但省略效果直接失效。我给你分享两个亲测有效的解决思路,按需选就行:

方案一:自定义EditText(推荐,复用性强)

核心思路是给EditText加个状态标记,通过点击事件切换「不可编辑(显示省略)」和「可编辑」状态,同时在状态切换时调整焦点、KeyListener等属性,让ellipsize能正常生效。

直接上代码:

public class ToggleEllipsizeEditText extends AppCompatEditText {
    // 标记当前是否处于可编辑状态
    private boolean isEditableMode = false;

    public ToggleEllipsizeEditText(Context context) {
        super(context);
        initView();
    }

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

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

    private void initView() {
        // 初始状态:不可编辑,显示末尾省略
        setEllipsize(TextUtils.TruncateAt.END);
        setSingleLine(true); // 单行省略,需要多行的话改成对应maxLines值
        setFocusable(false);
        setFocusableInTouchMode(false);
        setKeyListener(null); // 去掉编辑能力,让ellipsize生效
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // 点击时切换到可编辑状态
        if (event.getAction() == MotionEvent.ACTION_UP && !isEditableMode) {
            isEditableMode = true;
            // 恢复编辑能力
            setFocusable(true);
            setFocusableInTouchMode(true);
            setKeyListener(getDefaultKeyListener());
            // 请求焦点并把光标移到文本末尾
            requestFocus();
            setSelection(getText().length());
            return true;
        }
        return super.onTouchEvent(event);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        // 失去焦点时切回不可编辑状态,恢复省略显示
        if (!focused && isEditableMode) {
            isEditableMode = false;
            setFocusable(false);
            setFocusableInTouchMode(false);
            setKeyListener(null);
            // 强制触发ellipsize生效
            setEllipsize(TextUtils.TruncateAt.END);
        }
    }
}

布局里直接用这个自定义控件就行:

<com.your.package.name.ToggleEllipsizeEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="请输入内容..."
    android:text="这是一段超长超长超长超长超长超长超长超长超长的测试文本" />

方案二:TextView + EditText组合(简单易上手)

如果不想自定义控件,也可以用「TextView显示省略态,EditText负责编辑态」的组合方式,点击时切换两个控件的可见性。

布局代码:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- 初始显示的省略态TextView -->
    <TextView
        android:id="@+id/tv_ellipsize_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="1"
        android:text="这是一段超长超长超长超长超长超长超长超长超长的测试文本"
        android:textSize="16sp" />

    <!-- 编辑态的EditText,初始隐藏 -->
    <EditText
        android:id="@+id/et_editable_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:textSize="16sp" />
</FrameLayout>

Activity里的逻辑处理:

TextView tvEllipsize = findViewById(R.id.tv_ellipsize_view);
EditText etEditable = findViewById(R.id.et_editable_view);

// 点击TextView切换到编辑态
tvEllipsize.setOnClickListener(v -> {
    tvEllipsize.setVisibility(View.GONE);
    etEditable.setVisibility(View.VISIBLE);
    etEditable.setText(tvEllipsize.getText());
    // 请求焦点并把光标移到末尾
    etEditable.requestFocus();
    etEditable.setSelection(etEditable.getText().length());
});

// EditText失去焦点时切回省略态
etEditable.setOnFocusChangeListener((v, hasFocus) -> {
    if (!hasFocus) {
        tvEllipsize.setText(etEditable.getText());
        etEditable.setVisibility(View.GONE);
        tvEllipsize.setVisibility(View.VISIBLE);
    }
});

小提醒

如果需要多行省略,只要把两个方案里的setSingleLine(true)改成setLines(3)或者在布局里设置android:maxLines="3"就行,TextView和EditText的样式尽量保持一致,避免切换时出现视觉跳变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:40:34