Search code examples
androidxmlandroid-edittexttextviewhint

Android - how to make 2 hints on an EditText?


I know I can set a hint text for an EditText.
And currently, I just use space to separate 2 hints. However, the right hint text does not align to right of EditText.

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:hint="LEFT                RIGHT" />

What I want is as following style: enter image description here

How can make one hint on left and another hint on right for a single EditText?


Solution

  • Hi your issue is very interesting. In the source code of EditText you can see that hint is only CharSequence. There is no possible to set double hint. But you can create your own view which allow this. Look at my solution. Is very easy and it works.

    two_hints_edit_text.xml

    <?xml version="1.0" encoding="utf-8"?>
    <merge xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_gravity="center_vertical"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content">
        <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/non_active_edit_text"
                android:focusable="false"
                android:gravity="right|center_vertical"
                android:hint="Right"
                android:paddingTop="4dp"
                android:background="@null"/>
    
    
        <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/active_edit_text"
                android:hint="Left"
                android:layout_gravity="center_horizontal"/>
    </merge>
    

    EditTextWithTwoHints.java file

    public class EditTextWithTwoHints extends RelativeLayout{
    
        EditText activeField;
        EditText nonActiveEditText;
    
        final CharSequence hint;
    
        public EditTextWithTwoHints(Context context, AttributeSet attrs) {
            super(context, attrs);
            LayoutInflater.from(context).inflate(R.layout.two_hints_edit_text, this);
            activeField = (EditText)findViewById(R.id.active_edit_text);
            nonActiveEditText = (EditText)findViewById(R.id.non_active_edit_text);
            hint = nonActiveEditText.getHint();
            activeField.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    nonActiveEditText.setHint(s.length() !=0 ? "" : hint);
                }
    
                @Override
                public void afterTextChanged(Editable s) {
    
                }
            });
        }
    }
    

    Example on use in xml

    <you.package.EditTextWithTwoHints
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"/>
    

    Additionally you can create your own attribute to make your view more friendly to use.