我正在研究根据文字方向动态更改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,则将其对齐到左侧)。
任何建议或评论将不胜感激。谢谢