我正在研究和使用阿拉伯语进行活动。我希望用户名和密码的提示从右侧开始,我没有问题从左侧开始输入,但在我的UI中我希望提示是正确的。但是当我为EditText添加inputType时,提示会向左移动。我尝试以编程方式解决它,但它不起作用。
爪哇
EditText password = (EditText) findViewById(R.id.input_password);
password.setTypeface(Typeface.DEFAULT);
XML
<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"/>
答案 0 :(得分:7)
对于Android 4.4+中的EditText字段,这是Android框架中的错误:https://issuetracker.google.com/issues/37082815或https://code.google.com/p/android/issues/detail?id=201471。截至2016年7月,目前尚未解决。
但是有办法解决它:
要使提示正确显示在右侧(从右到左/ RTL模式),您必须删除 InputType属性textPassword
({{1} }),当没有输入文字时。
要保留显示点以隐藏键入文本的密码输入字段行为,您必须动态启用 InputType.TYPE_TEXT_VARIATION_PASSWORD
,输入第一个字符时。必须是删除所有字符时重置。
为了防止拉丁字符输入的UI故障(像“abc123”这样的LTR文本)向左跳跃或完全消失,您必须将textDirection显式设置为RTL 。
以下是详细信息:
InputType.TYPE_TEXT_VARIATION_PASSWORD
的先决条件:
AndroidManifest.xml
您的XML布局包含:
<application
...
android:supportsRtl="true"
... >
</application>
带有解决方法错误修复的Java代码:
<EditText
android:id="@+id/password"
android:inputType="textPassword"
android:hint="סיסמא"
... />
它应该像这样工作:
答案 1 :(得分:5)
使用重力属性调整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"/>
答案 2 :(得分:1)
以这种方式添加重力this.refs.first.blur()
right
如果您的API级别为17或更高,则可以使用
<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"/>
答案 3 :(得分:0)
使用&#39; gravity&#39;属性:
<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"/>
答案 4 :(得分:0)
我认为您可以通过在希伯来语/阿拉伯语(或任何其他RTL语言)文本中添加\u202B
来解决此问题。
示例:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText android:hint="Enter a number..." android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:inputType="number"/>
<EditText android:hint="\u202Bהכנס מספר..." android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:inputType="number"/>
</LinearLayout>
可悲的是,它似乎没有在布局预览中显示,但它在真正的设备上对我有用。写下here
答案 5 :(得分:0)
对于AppCompatEditText,编辑文本重力开始对我有用
<androidx.appcompat.widget.AppCompatEditText
......
android:hint="كلمه السر"
android:inputType="textPassword"
android:gravity="start"
.............../>
这仅在api 16以上有效
您也可以尝试,您必须在其中存储了当前语言的地方,我使用了此库com.akexorcist:localizationactivity
if(currentLanguage.country.toLowerCase() == "arabic"){
etPassword.gravity = GravityCompat.END
}else{
etPassword.gravity = GravityCompat.START
}
答案 6 :(得分:0)
这是我的type = password的editText解决方案(解决方法)。在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;
}
}
结果如下:(阿拉伯软键盘)
和英语软键盘:
答案 7 :(得分:0)
这个对我来说很好
android:textAlignment =“ viewStart”
提示方向将在正确的一侧