3

我有一个EditText重力设置为中心的问题。因此,我不得不将android:ellipsize="start"提示的属性放在中心。

但是,提示出现在光标之前,这给应用程序带来了相当难看的外观:

在此处输入图像描述

我想要做的是在文本之前显示光标。对此有什么建议吗?

4

3 回答 3

0

我有3个解决方案,实际上是2个方式。一方面当文本为空需要显示提示时,我们隐藏提示要么显示,另一方面是调整光标(widgit)位置。前提是EditText放在布局中,调整edittext的布局重力不是自重力。但我的要求是在提示之前,你只是重力向右。喜欢这张照片: 在此处输入图片描述

 @Override
public void onFocusChange(View v, boolean hasFocus) {
    adjustCursorPosition(etInput.getText());
}

@Override
public void afterTextChanged(Editable s) {
    adjustCursorPosition(etInput.getText());
}

private void adjustCursorPosition(CharSequence text){
    if (!TextUtils.isEmpty(etInput.getHint())){
        adjustGravityForCursor(text);
        //adjustCursorVisible(text);
        //adjustHintContent(hasFocus(),text);
    }
}

private void adjustHintContent(boolean hasFocus, CharSequence text){
    if (TextUtils.isEmpty(text)) {
        etInput.setHint(hasFocus ? "" : mHint);
    }
}

private void adjustCursorVisible(CharSequence text){
    etInput.setCursorVisible(!TextUtils.isEmpty(text));
}

private void adjustGravityForCursor(CharSequence text) {
    LayoutParams lp = (LayoutParams) etInput.getLayoutParams();
    if (mSpaceWidth <= 0) mSpaceWidth = lp.width;
    if (!TextUtils.isEmpty(text)) {
        etInput.setGravity(Gravity.CENTER);
        lp.leftMargin = 0;
    } else {
        etInput.setGravity(Gravity.LEFT);
        lp.leftMargin = (mSpaceWidth - measureText(etInput,mHint)) / 2;
    }
    etInput.setLayoutParams(lp);
}
于 2015-12-30T08:31:32.743 回答
-1

我认为您可以按照此线程使用 EditText 的setSelection方法。

于 2013-10-28T00:11:10.167 回答
-1

最快的解决方案是清除editText Touch上的提示:(我假设这个edittext是MYET)。首先,为 MYET 设置一个 onTouch 监听器。

然后,onTouch,返回 TRUE(假的插入)。

之后,onTouch,使用 MYET.setHint(""); 这将清除提示。

这是代码:

 MYET.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {

                           MYET.setHint(""); 
                return true;
            }
        });

注意:如果setHint("")不起作用,您可以使用MYET.setText("");

于 2014-07-22T17:33:02.117 回答