gpt4 book ai didi

android - 如何在 Android 中为固定大小的字符串制作带有下划线的 Edittext?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:20:04 26 4
gpt4 key购买 nike

我需要制作一个 EditText,在用户添加新字符时用一个下划线替换一个字符。像这样:

enter image description here

我做了类似的事情,有 6 个 EditText(所需字符串的大小)和一个 '_' 字符用于提示,当写入一个时将焦点更改为下一个,删除时将焦点更改为上一个,但我在删除或编辑不是最后添加的字符时遇到问题。 有谁知道我怎样才能做好?

这是我在 Activity 中的代码:

   private void manageFocus(final EditText beforeET, final EditText currenteET, final EditText afterET) {

if (beforeET != null) {
currenteET.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus && beforeET != null && beforeET.getText().toString().length() < 1 && currenteET.getText().toString().equals("")) {
beforeET.requestFocus();
}
}
});
}

currenteET.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void afterTextChanged(Editable s) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (afterET != null && currenteET.getText().toString().length() >= 1) {
afterET.requestFocus();
} else if (beforeET != null && currenteET.getText().toString().length() < 1) {
beforeET.requestFocus();
}
}
});
}

布局代码是这样的:

<LinearLayout
android:id="@+id/login_layout_code"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:visibility="gone">

<EditText
android:id="@+id/login_code_et01"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:hint="_"
android:textColorHint="@color/text_gray"
android:gravity="center"
android:textSize="@dimen/textsize_32"
android:inputType="number"
android:maxLength="1"
android:textColor="@color/text_gray"
fontPath="fonts/TitilliumText/TitilliumText22L-Bold.otf"/>

<EditText
android:id="@+id/login_code_et02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="_"
android:textColorHint="@color/text_gray"
android:textSize="@dimen/textsize_32"
android:layout_toRightOf="@id/login_code_et01"
android:inputType="number"
android:maxLength="1"
android:textColor="@color/text_gray"
fontPath="fonts/TitilliumText/TitilliumText22L-Bold.otf"/>

<EditText
android:id="@+id/login_code_et03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="_"
android:textColorHint="@color/text_gray"
android:textSize="@dimen/textsize_32"
android:layout_toRightOf="@id/login_code_et02"
android:inputType="number"
android:maxLength="1"
android:textColor="@color/text_gray"
fontPath="fonts/TitilliumText/TitilliumText22L-Bold.otf"/>

<EditText
android:id="@+id/login_code_et04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="_"
android:textColorHint="@color/text_gray"
android:textSize="@dimen/textsize_32"
android:layout_toRightOf="@id/login_code_et03"
android:inputType="number"
android:maxLength="1"
android:textColor="@color/text_gray"
fontPath="fonts/TitilliumText/TitilliumText22L-Bold.otf"/>

<EditText
android:id="@+id/login_code_et05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="_"
android:textColorHint="@color/text_gray"
android:textSize="@dimen/textsize_32"
android:layout_toRightOf="@id/login_code_et04"
android:inputType="number"
android:maxLength="1"
android:textColor="@color/text_gray"
fontPath="fonts/TitilliumText/TitilliumText22L-Bold.otf"/>

<EditText
android:id="@+id/login_code_et06"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="_"
android:textColorHint="@color/text_gray"
android:textSize="@dimen/textsize_32"
android:layout_toRightOf="@id/login_code_et05"
android:inputType="number"
android:maxLength="1"
android:textColor="@color/text_gray"
fontPath="fonts/TitilliumText/TitilliumText22L-Bold.otf"/>

</LinearLayout>

最佳答案

最后,我找到了解决方案,只在 EditText 中添加一个 TextWacher,在添加字符时在下一个字符中删除一个 '',在删除位置时添加一个 ''。

这是 EditText 的 xml 代码:

<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:singleLine="true"
android:text="______"
android:letterSpacing="0.2"
android:textSize="29sp" />

这是 Activity 中的代码:

    EditText editText;
private String text;
private boolean delete = false;
private static final int CODE_SIZE=6;


private void initTextView() {
text = editText.getText().toString();

editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

text = editText.getText().toString();
if (count > after)
delete = true;

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {


StringBuilder sb = new StringBuilder(s.toString());
int replacePosition = editText.getSelectionEnd();

if (s.length() != CODE_SIZE) {
if (!delete) {
if (replacePosition < s.length())
sb.deleteCharAt(replacePosition);
} else {
sb.insert(replacePosition, '_');
}

if (replacePosition < s.length() || delete) {
editText.setText(sb.toString());
editText.setSelection(replacePosition);
} else {
editText.setText(text);
editText.setSelection(replacePosition - 1);
}
}


}

delete = false;

}

@Override
public void afterTextChanged(Editable s) {
}
});


}

此代码在 API 级别 21 及更高版本中运行良好,因为 letterSpacin 仅适用于 API 级别 21 及更高版本。但是,如果您使用与 Android 股票不同的排版,它可能会起作用。对我来说,使用 TitilliumText22L-Regular。

关于android - 如何在 Android 中为固定大小的字符串制作带有下划线的 Edittext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com