Android 更改 EditText 的下划线长度

Android change length of underline for an EditText

我有一个提示 ("Name"),下划线覆盖了提示的长度,但是当我开始输入时,如果下划线短于暗示。我想知道有没有办法改变下划线的长度?

[][]3

此代码应满足您的要求:

final EditText editText = (EditText) findViewById(R.id.edit_query);
final CharSequence rememberHint = editText.getHint();
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (!b && TextUtils.isEmpty(editText.getText())) {
            editText.setHint(rememberHint);
        } else {
            editText.setHint("");
        }
    }
});

我使用 hack,因此,当我们关注我们的 edittext 或取消关注它但它不是空的时,我们从中清除提示,然后,当我们取消关注它并且它是空的时,我们将提示放回去。

已更新

您还可以将文本观察器添加到 return 提示位置,当您清除了所有文本,但没有从中移开焦点时:

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

    @Override
    public void afterTextChanged(Editable editable) {
        if (editable.length() != 0) {
            editText.setHint("");
        } else {
            editText.setHint(rememberHint);
        }
    }
});

这个对答案的补充将从用户的角度提供更多的默认行为。

请添加此侦听器:

yourEditText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {

                // you can call or do what you want with your EditText here
                youEditText.setHint("");
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            public void onTextChanged(CharSequence s, int start, int before, int count) {}
        });