Android EditText保持提示可见且右侧

时间:2013-12-01 08:49:36

标签: android android-edittext hint

如何在用户输入期间及之后在EditText中显示提示? 是否可以在EditText控件的右侧放置提示,但是用户输入文本 - 在左侧?

以下是我正在寻找的一个例子:

Both hint and user input are visible

4 个答案:

答案 0 :(得分:1)

所以我发现了一个非常简单的解决方案,有点棘手,但它确实有效 - 只需要使用EditText进行相对布局输入,使用TextView进行内部提示:

<RelativeLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Some text"
            android:layout_alignParentLeft="true"
            android:id="@+id/editText2"
            android:layout_gravity="center"
            />
    <TextView
            android:id="@+id/text_hint"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:text="HintText"
            android:textSize="18sp"
            android:layout_marginRight="10dp"
            android:textColor="#808080"
            />
</RelativeLayout>

答案 1 :(得分:0)

当用户在字段中输入文本时,您可以使用onFocusChangeListener显示editText。

myEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
           myEditText.setHint(R.string.hint);
        }
      }
    });

关于提示的对齐方式,无法正确对齐提示。至少它不是直截了当的。在正常情况下,Hint被设计为仅在EditText框中没有文本时才可见,并且它具有与editText内容相同的重力。如果你想提供一个持久的“提示”,你可以尝试在editText之外的右侧附带一个TextView。

答案 2 :(得分:0)

我不确定小部件机制是否可行。 我会尝试使用在每次回调后调用的函数来管理其内容(您必须设置一个侦听器到edittext)。 尝试添加此侦听器:

textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {}
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){
         /*here goes your function*/     }
}); 

然后对于函数使用解析的HTML在用户输入后给几个空格的灰色'提示'颜色。您可以使用以下公式:

String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();

希望这可以让您了解如何实现它。

答案 3 :(得分:0)

@ Sergii,

我同意你的看法。

这里是我的带有相同XML的答案代码

private void setHintRight(final EditText et, final TextView tv) {
        et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus == false && TextUtils.isEmpty(et.getText().toString())) {
                    tv.setVisibility(View.VISIBLE);
                }
            }
        });
        et.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
                if (et.getText().length() == 0) {
                    tv.setVisibility(View.VISIBLE);
                } else {
                    tv.setVisibility(View.GONE);
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
    }

在这里,你必须传递带有左重力的edittext和带有正确重力的Textview ......