2015-09-26 5 views
2

У меня есть текстовое представление в приложении для обмена сообщениями Android. Я получаю сообщения своего телефона Android, и я показываю их в текстовых изображениях. Я хочу установить layout_gravity вправо, если текст персидский, так как я могу определить язык текста, который я получаю из-под uri ?Как получить текст текста в текстовом виде?

Uri uri = Uri.parse("content://sms/"); 
+0

не понимаю ваш вопрос –

+0

@BhavdipPathar В чем проблема с этим? Мое приложение - это приложение для sms, и я получаю сообщения из базы данных и показываю, что некоторые из них являются wriiten на английском и некоторые персидские, как я могу обнаружить, что sms на персидском языке или нет? – Suzi

+1

доступны опции для определения языка. [проверьте это] (https://www.google.co.in/search?q=language+detection+online+apis&oq=language+detection+online+apis&aqs=chrome..69i57.7601j0j1&sourceid=chrome&es_sm=93&ie=UTF -8 # д = язык + обнаружение + Google + Apis + андроид). –

ответ

2

Мое решение, чтобы получить пользователя предпочтительным Locale

Locale.getDefault(); 

ИЛИ

Locale.getDefault().getLanguage(); 

и установить layout_gravity на основе результата Locale.


Locale примеры:

Locale.getDefault().getLanguage()  ---> en  
Locale.getDefault().getISO3Language() ---> eng 
Locale.getDefault().getCountry()  ---> US 
Locale.getDefault().getISO3Country() ---> USA 
Locale.getDefault().getDisplayCountry() ---> United States 
Locale.getDefault().getDisplayName() ---> English (United States) 
Locale.getDefault().toString()   ---> en_US 
Locale.getDefault().getDisplayLanguage()---> English 

Locale

Язык представляет собой сочетание языка/страны/вариант. Локали составляют , используемые для изменения представления информации, такой как цифры или даты , в соответствии с соглашениями в регионе, который они описывают.

Коды языков представляют собой двухбуквенные коды языка ISO (такие как как «en»), как определено в ISO 639-1. Коды стран - это двухбуквенные коды стран с заглавной буквой (например, «США»), как определено в стандарте ISO 3166-1. Коды вариантов не определены.

Обратите внимание, что Java использует несколько устаревших двухбуквенных кодов. Иврит («he») код языка переписан как «iw», индонезийский («id») как «in», и идиш («yi») как «ji».


UPDATE:
основе @rahul-tiwari комментарий:

Чтобы получить текущий язык клавиатуры, использование:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype(); 
String locale = ims.getLocale(); 




я не получил ваш вопрос правильно, спасибо @rahul-tiwari.

UPDATE N.º 2

Существует Bidi класс. Этот класс имеет метод getBaseLevel(), который возвращает 0, если ваш текст иначе 1 (если right-to-left).

пример:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 

     Bidi bidi = new Bidi(userList.get(position).getName(), Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 
     if(bidi.getBaseLevel() == 0) 
      convertView = myInflater.inflate(R.layout.list_add_friends_row, null); 
     else 
      convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null); 

Существует еще один метод, baseIsLeftToRight() что может быть лучше использовать, если заявление. Результат был таким же, как и выше.

Bidi bidi = new Bidi(userList.get(position).getName(), Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 
if(bidi.baseIsLeftToRight()) 
       convertView = myInflater.inflate(R.layout.list_add_friends_row, null); 
      else 
       convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null); 

SRC: https://stackoverflow.com/a/18008575/797495


public final class Bidi 
extends Object 

Этот класс реализует Unicode двунаправленный алгоритм.

Объект Bidi предоставляет информацию о двунаправленном переупорядочивании текста, используемого для его создания. Это необходимо, например, для правильного отображения текста на арабском или иврите. Эти языки по сути смешаны направленные, поскольку они упорядочивают номера слева направо, заказывая самый другой текст справа налево.

После создания объект Bidi может быть запрошен, чтобы увидеть, есть ли текст, который он представляет , - это все слева направо или все справа налево. Такие объекты очень легкие, и этот текст относительно прост в обработке.

Если есть несколько строк текста, информация о прогонах может быть доступной путем индексирования, чтобы получить начало, ограничение и уровень прогона. Уровень представляет собой как направление, так и уровень «вложенности» направленного прогона . Нечетные уровни справа налево, а четные уровни - слева направо. Так, например, уровень 0 представляет текст слева направо, , в то время как уровень 1 представляет текст справа налево, а уровень 2 представляет текст слева направо, встроенный в ход справа налево.

+0

это обеспечит языковой стандарт телефона, который может быть или не быть языком sms-текста. –

+0

Вы правы, я обновил свой ответ, tks! –

+0

снова это обеспечит локализацию клавиатуры. Вопрос заключается в отображении sms, уже присутствующего в sms-папке пользователя. –