我正在研究根据文本方向动态更改 UI 的可行性。尽管 Google 支持 RTL 语言(参考:Android 4.2 中的原生 RTL 支持),但它并未涵盖应用程序混合了 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;
}
结果是:
我根据行是偶数还是奇数来镜像行。现在,我的问题是如何根据名称镜像 UI。我想我应该将条款条件从更改if(position % 2 == 0)
为if(isNameLTR(FIRST_CHAR_OF_NAME))
. 我不知道如何实现这个方法。
我怎么知道一个字符是 LTR 还是 RTL?(我认为 Android 知道单词的第一个字符是 RTL 或 LTR,这就是为什么当文本视图的宽度与父级匹配时,如果字符是 RLT,则将文本向右对齐,如果字符是 LTR,则向左对齐)。
任何建议或意见将不胜感激。谢谢