Как получить направление текста в Android и динамически изменить макет в соответствии с направлением?
Я провожу исследование возможности динамического изменения пользовательского интерфейса в зависимости от направления текста. Хотя Google поддерживает языки RTL (ссылка:Встроенная поддержка RTL в Android 4.2), но это не относится к ситуации, когда приложение имеет смесь содержимого LTR и RTL.
Решение Google является правильным, если у нас многоязычное приложение, и оно имеет разные источники статических данных (например, пункты меню) на разных языках. Однако я не нашел другого документа о том, как динамически изменять макет в зависимости от направления текстового содержимого.
На следующем рисунке показан текущий дизайн моего тестового приложения. Список приходит с Facebook (список моих друзей) и содержит английские и персидские имена.
Мое решение состоит в том, чтобы иметь два макета (один для LTR и один для RTL) в адаптере и назначать каждый в зависимости от направления имени. Итак, я написал следующие строки кода:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(position % 2 == 0)
convertView = myInflater.inflate(R.layout.list_add_friends_row, null);
else
convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null);
holder = new ViewHolder();
holder.llSection = (LinearLayout) convertView.findViewById(R.id.section);
holder.tvUserName = (TextView) convertView.findViewById(R.id.tvUserName);
holder.ivPicture = (ImageView) convertView.findViewById(R.id.ivPicture);
holder.btnAdd = (Button) convertView.findViewById(R.id.btnAdd);
convertView.setTag(holder);
holder.btnAdd.setTag(position);
holder.tvUserName.setText(userList.get(position).getName());
imageDownloader.displayImage(holder.ivPicture, userList.get(position).getPhotoUrl());
...
return convertView;
}
и результат:
Я отразил строки на основе того, является ли строка четной или нечетной. Теперь мой вопрос заключается в том, как отразить пользовательский интерфейс на основе имени. Я думаю, что я должен изменить условие условия сif(position % 2 == 0)
что-то вродеif(isNameLTR(FIRST_CHAR_OF_NAME))
, Я понятия не имею, как реализовать этот метод.
Как я могу узнать, что персонаж LTR или RTL? (Я думаю, что Android знает, что первым символом слова является RTL или LTR, поэтому, когда ширина представления текста совпадает с родительским, он выравнивает текст по правому краю, если символ RLT, и по левому краю, если символ LTR).
Любые предложения или комментарии будут оценены. Спасибо