EditText游标位于提示后

时间:2014-04-06 11:04:06

标签: android android-edittext

我的应用中有一个简单的登录activity,其中包含电子邮件和密码字段。电子邮件hint中的cursorEditText位置存在一个奇怪的问题:

从图像中可以看出,默认情况下,cursor不在第一个位置。提示后显示 (好像hint是输入文字)

layout而言,密码EditText与电子邮件密码相同,但它没有出现此问题:

任何人都知道为什么会这样?我该如何解决?


这是活动的布局:

<ScrollView
    android:id="@+id/login_form"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        style="@style/LoginFormContainer"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:hint="@string/prompt_email"
            android:inputType="textEmailAddress"
            android:maxLines="1"
            android:singleLine="true" />

        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:hint="@string/prompt_password"
            android:imeActionId="@+id/login"
            android:imeActionLabel="@string/action_sign_in_short"
            android:imeOptions="actionUnspecified"
            android:inputType="textPassword"
            android:maxLines="1"
            android:singleLine="true" />

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:gravity="center" >

            <!-- sign in button -->

            <TextView
                android:gravity="center"
                android:id="@+id/sign_in_button"
                android:layout_width="120dip"
                android:layout_height="50dip"
                android:layout_alignParentRight="true"
                android:layout_marginLeft="25dip"
                android:layout_marginRight="20dip"
                android:background="@drawable/btn_background_login_and_offered_and_followers"
                android:clickable="true"
                android:onClick="signInButton"
                android:text="@string/action_sign_in_register" />

            <!-- sign up button -->

            <TextView
                android:gravity="center"
                android:id="@+id/sign_up_button"
                android:layout_width="120dip"
                android:layout_height="50dip"
                android:layout_marginLeft="20dip"
                android:layout_toLeftOf="@id/sign_in_button"
                android:background="@color/Gray"
                android:onClick="signUpButton"
                android:text="@string/action_sign_up_register" />
        </RelativeLayout>
    </LinearLayout>
</ScrollView>

如果需要任何其他代码部分,请告诉我添加它。

6 个答案:

答案 0 :(得分:6)

试试我的代码:

android:textCursorDrawable="@null"

它对我有用。

答案 1 :(得分:0)

试试这个 http://developer.android.com/reference/android/text/Selection.html#setSelection(android.text.Spannable, int)  一个简单的yourEditText.setSelection(0);就足够了

答案 2 :(得分:0)

试试这个:

android:gravity="left|center"

答案 3 :(得分:0)

据我所知,你想要为你的EditText(它应该是RTL)和LTR输入文本(如电子邮件,密码和......)提供波斯语提示

在我的应用中,我这样做,在XML中:

<EditText
    android:id="@+id/editText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="101dp"
    android:ems="10"
    android:hint="ایمیل را وارد نمائید" >

    <requestFocus />
</EditText>

在Java中:

final EditText  editTxt = (EditText) findViewById(R.id.editText2);

        editTxt.setGravity(Gravity.RIGHT);
        editTxt.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                if (editTxt.getText().length() == 0)
                {
                    editTxt.setGravity(Gravity.RIGHT);
                }
                else {
                    editTxt.setGravity(Gravity.LEFT);
                }

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

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

它给了我,我的目标结果。提示右对齐,当用户开始输入时,键入的文本对齐到左边,这样游标问题也会解决:D

答案 4 :(得分:0)

五年后,我们仍然遇到这个问题。我想出的使光标稍微不那么难看的方法是对所有EditText使用android:textDirection="ltr"android:textDirection="rtl"。这将迫使光标移至提示的末尾/开始,当然我们仍然可以使用重力将提示置于中心或任何我们想要的地方。

答案 5 :(得分:0)

您可以使用 TextInputEditText 也可以使用 android:textAlignment="viewStart"

这是一个例子:

<com.google.android.material.textfield.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/enter_password"
                    android:inputType="textPassword"
                    android:paddingHorizontal="25dp"
                    android:paddingVertical="10dp"
                    android:textAlignment="viewStart"/>
            </com.google.android.material.textfield.TextInputLayout>