我在项目中使用编辑文本。
问题在于,每当我在文本框中输入任何内容时,它都会显示,但无论我键入多少个字符,光标都不会从其起始位置移动。此外,我无法通过单击文本框中的任何特定字符来移动。
我的包含编辑文本的xml文件就像这样
<EditText
android:id="@+id/xEt"
android:layout_width="fill_parent"
android:layout_height="295dp"
android:layout_alignParentLeft="true"
android:ems="10"
android:focusableInTouchMode="true"
android:focusable="true" >
xml文件是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/xsubLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true" >
</RelativeLayout>
<EditText
android:id="@+id/xEt"
android:layout_width="wrap_content"
android:layout_height="295dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10"
android:inputType="textMultiLine" >
<requestFocus />
</EditText>
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:id="@+id/xK1"
android:layout_height="wrap_content" android:orientation="vertical"
android:visibility="gone">
<include android:id="@+id/xKeyBoard" layout="@layout/gf"></include>
<include android:id="@+id/xtop" layout="@layout/top"></include>
<include android:id="@+id/x11" layout="@layout/x1"></include>
<include android:id="@+id/x12" layout="@layout/x3"></include>
<include android:id="@+id/x13" layout="@layout/x4"></include>
<include android:id="@+id/x14" layout="@layout/x5"></include>
<include android:id="@+id/x15" layout="@layout/x6"></include>
<include android:id="@+id/x16" layout="@layout/x7"></include>
<include android:id="@+id/x17" layout="@layout/x8"></include>
<include android:id="@+id/x18" layout="@layout/x9"></include>
<include android:id="@+id/x19" layout="@layout/x10"></include>
<include android:id="@+id/x20" layout="@layout/x11"></include>
<include android:id="@+id/x22" layout="@layout/x13"></include>
<include android:id="@+id/x23" layout="@layout/x14"></include>
<include android:id="@+id/x24" layout="@layout/x15"></include>
<include android:id="@+id/x25" layout="@layout/x16"></include>
<include android:id="@+id/x26" layout="@layout/x17"></include>
<include android:id="@+id/x27" layout="@layout/x18"></include>
<include android:id="@+id/x28" layout="@layout/x19"></include>
</RelativeLayout>
</RelativeLayout>
答案 0 :(得分:1)
在我的情况下,这是由于使用以下原因造成的:
android:textAllCaps="true"
在我的xml布局的EditText元素中。
当我删除它时,它按预期工作
答案 1 :(得分:0)
将这些属性设置为XML文件
<YourLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText
android:id="@+id/xEt"
android:layout_width="fill_parent"
android:layout_height="295dp"
android:layout_alignParentLeft="true"
android:ems="10"
android:clickable="true"
android:cursorVisible="true"/>
</YourLayout>
试试这个。 并把它放在你的java代码中。
EditText et = (EditText)findViewById(R.id.xEt);
et.setSelection(et.getText().length());
答案 2 :(得分:0)
我正在使用此解决方法来解决此问题, 如果字符是英文或数字字符,那么将EditText的重力更改为左边的另一种语言,在我的情况下,它是阿拉伯语,然后将重力改为左边,光标将根据每种语言以正确的方式移动:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.length() > 0){
char c = s.charAt(0);
// characters are Enlgish or digits.
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || Character.isDigit(c)) {
editText.setGravity(Gravity.LEFT);
}else {
editText.setGravity(Gravity.RIGHT);
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
答案 3 :(得分:0)
您是否绑定了您对模型的看法?即你有MVVM设置吗?
如果这样做,请确保没有任何周期性更新,特别是对于双向绑定,即如果用户键入字符,则更新模型,然后更新EditText控件并重复。
因此,根据您的Editext控件属性,每次模型更改更新它时,都可以将光标重置为起始位置。
如果是这种情况,在从模型更新模型值和EditText文本值之前进行简单的相等检查应该可以解决问题。
if (txtEdit.text != modelValue)
{
txtEdit.text = modelValue;
}
答案 4 :(得分:0)
回答这个问题可能有点太晚了。但即使我使用自定义键盘遇到同样的问题。在每个edittext的XML文件中添加以下行后,问题也解决了。
机器人:imeOptions = “flagNoExtractUi”
机器人:的inputType = “textNoSuggestions”
喜欢这个
<Editext
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="2dp"
android:inputType="textNoSuggestions"
android:imeOptions="flagNoExtractUi"/>
我看到很多人都在搜索这个,所以我发布了与我的问题相关的那个。