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:
How can make one hint on left and another hint on right for a single EditText?
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.