在java android编辑文本字段中只显示一个字符



我试图在java中登录android应用程序,但在editText字段中只显示一个字符(当我试图输入第二个字符时,我可以输入一个字符,第一个字符消失了),密码字段工作良好,这个问题不会发生在所有手机中只是在一些。所有的手机都是android 9和android 8,区别在于屏幕分辨率。

我在不同的屏幕分辨率下遇到了问题,而不仅仅是一种类型。我可以写所有的字符串,但只有当我将光标返回到左边时:字符串被反向显示(例如,如果我尝试输入hello,它将显示:olleh)

请问问题的根源是什么?

名称字段:

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/userWrapper"
style="@style/MessageError"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="2dp"
android:textAlignment="center"
android:layout_marginBottom="5dp"
android:gravity="center_horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/user_edit_text"
android:hint="Name"
android:background="@drawable/custom_input"
android:padding="10dp"
android:paddingStart="20dp"
/>
<ImageButton
android:id="@+id/clean"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:src="@drawable/ic_baseline_cancel_24"
android:layout_centerVertical="true"
android:layout_marginTop="2dp"
android:layout_marginLeft="-40dp"
android:background="@color/white_with_alpha"
android:onClick="cleanText"
android:visibility="gone"
android:text="Button"/>
</LinearLayout>
</com.google.android.material.textfield.TextInputLayout>

密码字段:

<com.google.android.material.textfield.TextInputLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/passwordWrapper"
style="@style/MessageError"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:textAlignment="center"
android:layout_marginTop="0dp"
app:passwordToggleDrawable="@drawable/ic_password_visibility_selector"
app:passwordToggleEnabled="true"
app:passwordToggleTint="@color/grey"
>
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/password_edit_text"
android:layout_below="@+id/login"
android:layout_marginTop="-10dp"
android:hint="mot de passe"
android:inputType="numberPassword"
android:drawableEnd="@drawable/ic_eye_password"
android:background="@drawable/custom_input_v3"
android:padding="10dp"
android:paddingStart="15dp"
/>
</com.google.android.material.textfield.TextInputLayout>

这是Java类中在字符号5之后添加点的处理

class myTextWatcher implements TextWatcher {
int first = 0;
int second;
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void afterTextChanged(Editable editable) {
second = first;
first = editable.length();
if(TextUtils.isEmpty(editable.toString())){
clean.setVisibility(View.GONE);
}else{
clean.setVisibility(View.VISIBLE);
}
if(editable.length() == 5 && first>second){
user_edit_text.append(".");
}
if(editable.length() == 5 && second>first){
String newString = editable.toString();
user_edit_text.setText(newString.substring(0,newString.length()-1));
}
}
}

尝试使用这个,而不是在TextInputLayout中包装LinearLayout

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/userWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="2dp"
android:textAlignment="center"
android:layout_marginBottom="5dp"
android:drawablePadding="10dp"
android:hint="@string/user_edit_text"
app:startIconDrawable="@drawable/ic_baseline_cancel_24"
app:startIconTint="@color/white_with_alpha">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/user_edit_text"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:inputType="datetime"
android:padding="10dp"
android:paddingStart="20dp" />
</com.google.android.material.textfield.TextInputLayout>

最新更新