Я делаю некоторое исследование о возможности изменения пользовательского интерфейса динамически на основе направления текста. Хотя 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).
Любое предложение или комментарии будут оценены. Благодаря