I\'m working on and activity with arabic language. I want the hint of the username and password to start from the right and I have no problem f typing started from the left
For AppCompatEditText edit text gravity start worked for me
<androidx.appcompat.widget.AppCompatEditText
......
android:hint="كلمه السر"
android:inputType="textPassword"
android:gravity="start"
.............../>
This will work only above api 16
you can also try, Where you must have stored your current language I used this library com.akexorcist:localizationactivity
if(currentLanguage.country.toLowerCase() == "arabic"){
etPassword.gravity = GravityCompat.END
}else{
etPassword.gravity = GravityCompat.START
}
add gravity right
try this way
<EditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="كلمة المرور"
android:textColorHint="#FFFFFF"
android:inputType="textPassword"
android:background="@null"
android:textColor="#FFFFFF"
android:textSize="20dp"
android:gravity="right"/>
if your API level 17 and higher you can use
android:textDirection="anyRtl"
Use Gravity Attribute to Adjust the Hint for EditText
<EditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="كلمة المرور"
android:textColorHint="#FFFFFF"
android:gravity="right"
android:inputType="textPassword"
android:background="@null"
android:textColor="#FFFFFF"
android:textSize="20dp"/>
This one works fine for me
android:textAlignment="viewStart"
The hint direction will be at the correct side
Here my solution (workaround) for editText with type = password. Work on Android 5, Android 6.
edittext_password = (EditText) rootView.findViewById(R.id.edittext_password);
if (RTLUtils.isLeftToRightLanguage()) {
edittext_password.setGravity(Gravity.START);
} else {
// Force a right-aligned text entry, otherwise latin character input,
// like "abc123", will jump to the left and may even disappear!
edittext_password.setTextDirection(View.TEXT_DIRECTION_RTL);
// Make the hint display on the right hand side
edittext_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
}
edittext_password.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
isLeftToRight = RTLUtils.isLeftToRightLanguage(charSequence.toString());
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (editable.length() > 0) {
isLeftToRight = RTLUtils.isLeftToRightLanguage(editable.toString());
if (isLeftToRight) {
edittext_password.setGravity(Gravity.START);
edittext_password.setTextDirection(View.TEXT_DIRECTION_LTR);
edittext_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
// Move the cursor to the correct place (after the typed character)
edittext_password.setSelection(editable.length());
} else {
//edittext_password.setGravity(Gravity.END);
edittext_password.setTextDirection(View.TEXT_DIRECTION_RTL);
// When a character is typed, dynamically change the EditText's
// InputType to PASSWORD, to show the dots and conceal the typed characters.
edittext_password.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD |
InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
// Move the cursor to the correct place (after the typed character)
edittext_password.setSelection(editable.length());
}
} else { // empty text
if (!RTLUtils.isLeftToRightLanguage()) {
// Must be in this order (first setInputType then setTextDirection)
edittext_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
edittext_password.setTextDirection(View.TEXT_DIRECTION_RTL);
}
}
}
});
public static boolean isLeftToRightLanguage() {
Bidi bidi = new Bidi(Locale.getDefault().getDisplayLanguage(), Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
if (bidi.isLeftToRight()) {
return true;
} else {
return false;
}
}
public static boolean isLeftToRightLanguage(String text) {
Bidi bidi = new Bidi(text, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
if (bidi.isLeftToRight()) {
return true;
} else {
return false;
}
}
And here result: (Arabic soft keyboard)
and English soft keyboard:
Use 'gravity' attribute:
<EditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="كلمة المرور"
android:textColorHint="#FFFFFF"
android:gravity="right"
android:inputType="textPassword"
android:background="@null"
android:textColor="#FFFFFF"
android:textSize="20dp"/>