安卓EditText文本和提示布局

4
我有一个关于Android中EditText的问题。我该如何设置提示文字居中,但文本左对齐?非常感谢。
我只是想让光标位于EditText的左侧,同时提示文字位于中心。

你的意思是在一个EditText里面吗? - Android Killer
1
这看起来像是一个类似的问题:https://dev59.com/wnA75IYBdhLWcg3wqK10 - andrrs
2个回答

4

您可以通过Java代码以编程方式完成此操作。例如:

final EditText editTxt = (EditText) findViewById(R.id.my_edit_text);

editTxt.setGravity(Gravity.CENTER_HORIZONTAL);

editTxt.setOnKeyListener(new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if (event.getAction() != KeyEvent.ACTION_UP) return false;

        if (editTxt.getText().length() > 1) return false;

        if (editTxt.getText().length() == 1) {
            editTxt.setGravity(Gravity.LEFT);
        }
        else {
            editTxt.setGravity(Gravity.CENTER_HORIZONTAL);
        }

        return false;
    }
});

不要错过“final”关键字,它使你的textView在listener代码中可见。
你可以在“onKey”方法中将`View v`转换为`TextView`,而不是使用“final”关键字。
更新于2012年3月9日:
在这种情况下,可以删除`onKeyListener`并编写`onFocusChangeListener`
以下是一些代码:
editTxt.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {

        if (hasFocus) {
            editTxt.setGravity(Gravity.LEFT);
        }
        else {
            if (editTxt.getText().length() == 0) {
                editTxt.setGravity(Gravity.CENTER_HORIZONTAL);
            }
        }               
    }
});

非常感谢,但是我希望光标即使在没有输入任何内容(长度为0)的情况下也位于左侧。 - Tim Wong

0

您可以使用这种方式(在提示前添加所需数量的空格)。 将此代码添加到您的自定义EditText类中:

@Override
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    String hint = getContext().getString(R.string.my_hint);
    float spaceSize = getPaint().measureText(" ");
    float textSize = getPaint().measureText(hint);
    int freeSpace = w - this.getPaddingLeft() - this.getPaddingRight();
    int spaces = 0;
    if (freeSpace > textSize) {
        spaces = (int) Math.ceil((freeSpace - textSize) / 2 / spaceSize);
    }
    if (spaces > 0) {
        Log.i(TAG, "Adding "+spaces+" spaces to hint");
        hint = prependStringWithRepeatedChars(hint, ' ', spaces);
    }
    setHint(hint);
}

private String prependStringWithRepeatedChars(/* some args */) {
    /// add chars to the beginning of string
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接