7

我在我的项目中使用编辑文本。

问题是,每当我在文本框中输入任何内容时,它都会显示出来,但无论我输入多少字符,光标都不会从其起始位置移动。此外,我无法通过单击文本框中的任何特定字符来移动。

我用于包含编辑文本的 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>
4

5 回答 5

3

回答这个问题可能为时已晚。但即使我使用自定义键盘也遇到了同样的问题。在每个edittext的XML文件中添加以下行后,我也解决了这个问题

android:imeOptions="flagNoExtractUi"

android:inputType="textNoSuggestions"

像这样

<Editext                
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:paddingLeft="2dp" 
 android:inputType="textNoSuggestions"
 android:imeOptions="flagNoExtractUi"/>

我看到很多人在搜索这个,所以我已经发布到与我的问题相关的一个。

于 2017-03-24T08:57:24.467 回答
3

就我而言,它是由使用引起的:

android:textAllCaps="true"

在我的 xml 布局的 EditText 元素中。

当我删除它时,它按预期工作

于 2020-09-28T20:35:18.790 回答
3

您是否将视图绑定到模型?即您有 MVVM 设置吗?

如果这样做,请确保您没有任何周期性更新,特别是对于双向绑定,即,如果用户键入一个字符,您将更新您的模型,这将反过来更新 EditText 控件并重复。

因此,根据您的 Editext 控件属性,每次模型更改更新它时,它可能会将光标重置到起始位置。

如果是这种情况,在从模型更新之前对模型值和 EditText 文本值进行简单的相等性检查应该可以解决问题。

if (txtEdit.text != modelValue)
{
    txtEdit.text = modelValue;
}
于 2016-08-12T15:09:42.370 回答
1

我正在使用此解决方法来解决此问题,如果字符是英文或数字字符,则将 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) {

            }
        });
于 2016-01-21T15:08:01.960 回答
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());
于 2012-12-03T11:10:52.497 回答