Двойной курсор в EditText для ввода типа номера/телефона (арабский язык с письмом справа налево)

У меня есть EditText, установленный на гравитацию справа, так что текст начинается справа, если язык арабский.

Примечание. Мое приложение поддерживает RTL, и я не устанавливаю TextDirection для своего EditText, так как это будет иметь ту же проблему. Гравитация, установленная на право, отлично справляется со своей задачей. У меня проблема, только если я устанавливаю InputType в Number или Phone.

Если для InputType установлено значение number/phone, в начале и в конце текста появляется двойной курсор, что немного сбивает с толку.

Чтобы продемонстрировать это, у меня есть два EditText с InputType Text и Number, для Gravity установлено значение Right для обоих. Мое приложение поддерживает RTL, и мой телефон теперь настроен на арабский язык

Манифест

android:supportsRtl="true"

XML

 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="text"
            android:inputType="text"
            android:lines="1"
            android:maxLines="1"
            android:gravity="right"
            />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/phone"
            android:inputType="number"
            android:lines="1"
            android:maxLines="1"
            android:gravity="right"
            />

Вот скриншот поведения второго EditText с номером InputType.

Любые указатели на то, как избавиться от двойного курсора? или любая альтернатива.

Спасибо Р

введите описание изображения здесь


person BRDroid    schedule 29.01.2018    source источник
comment
Я получаю один курсор на номер настройки в тексте редактирования.   -  person Aditya    schedule 29.01.2018
comment
Спасибо за ваше сообщение. Ваш язык установлен на арабский?   -  person BRDroid    schedule 29.01.2018
comment
Поведение нормальное при смешивании арабского с английским. Я не вижу, где смесь, но я не знаю.... проверьте stackoverflow.com/questions/35011074/   -  person Mohammad Tabbara    schedule 29.01.2018
comment
@MohammadTabbara Да, я видел это сообщение, если мы установим TextDIrection для EditText, это нормальное поведение, но если мы установим для Gravity значение Right и TextInput для Text, это нормально, как в моем первом примере EditText. Только если у меня есть InputType как Number/Phone, он имеет двойной курсор. Так что, если кто-нибудь нашел решение для этого.   -  person BRDroid    schedule 29.01.2018
comment
@BRDroid у вас есть решение для этого, у меня тоже такая же проблема, пожалуйста, помогите мне, я застрял с этим   -  person Amit Verma    schedule 06.06.2018


Ответы (5)


Используйте свойства layout_direction как «ltr» и гравитацию «right».

      <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/phone"
            android:inputType="number"
            android:lines="1"
            android:maxLines="1"
            android:gravity="right" />

Это решило мою проблему.

person Viswas Kg    schedule 01.11.2018

Текст редактирования не знает, является ли следующий символ, который вы нажмете, числом или буквой, поэтому в случае буквы он помещает крайний левый, а крайний правый - для числа (скорее всего, вы знаете, что просто убедитесь) .

Так что он исчезнет, ​​если вы переключитесь на английский язык.

Я думаю, что это фундаментально в тексте редактирования:

Решения:

1- Вы можете создать свой собственный текст редактирования с нуля (из просмотра). (может занять месяц со всеми проблемами, которые могут возникнуть).

2- Найдите способ переопределить текст редактирования, чтобы удалить разделение.

3- Найдите мерзавца, где кто-то решил эту проблему (в чем я сомневаюсь).


Это не похоже на проблему для программиста или пользователя. Дизайнер, возможно, будет немного раздражен, но игнорировать это — самый быстрый способ.

Извините, если это не было полезно.

person Mohammad Tabbara    schedule 29.01.2018

ViewCompat.setLayoutDirection(findViewById(R.id.myedittext), ViewCompat.LAYOUT_DIRECTION_LTR);

мне помогло.

person waelalk    schedule 28.03.2018

оберните текст редактирования в linearlayout с горизонтальной ориентацией и layoutDirection ltr

person Azade Rahmati    schedule 21.04.2020

попробуй поменять android:inputType="number" на телефон..

Например :

   <com.test.utils.custom.CustomTelephone
    android:id="@+id/custom_telephone"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    android:inputType="phone"
    android:text="@string/telephone_number_title"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/iv_logo" />

это сработало для меня..

если не работает, попробуйте добавить layoutDirection: Rtl в текст редактирования как атрибут. Удачного кодирования..!

person Aslm Monir    schedule 16.06.2021