Como obter direção de texto no Android e alterar o layout dinamicamente de acordo com a direção?
Eu estou fazendo algumas pesquisas sobre a viabilidade de alterar a interface do usuário dinamicamente com base na direção de um texto. Embora o Google esteja suportando idiomas RTL (ref:Suporte nativo a RTL no Android 4.2) mas não abrange uma situação em que a aplicação possui uma mistura de conteúdos LTR e RTL.
A solução do Google está correta se tivermos aplicativos multilíngües e tiver diferentes fontes de dados estáticos (como itens de menu) em diferentes idiomas. No entanto, não encontrei nenhum outro documento sobre como alterar o layout dinamicamente com base na direção do conteúdo de texto.
A imagem a seguir mostra o design atual do meu aplicativo de teste. A lista vem do Facebook (lista dos meus amigos) e contém nomes em inglês e persa.
Minha solução é ter dois layouts (um para LTR e um para RTL) no adaptador e atribuir cada um deles com base na direção do nome. Então, escrevi as seguintes linhas de código:
@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;
}
e o resultado é:
Espelhei linhas com base em if row is even ou odd. Agora, minha pergunta é como espelhar a interface do usuário com base no nome. Eu acho que deveria mudar a condição da cláusula deif(position % 2 == 0)
para algo comoif(isNameLTR(FIRST_CHAR_OF_NAME))
. Não tenho ideia de como implementar esse método.
Como posso saber se um personagem é LTR ou RTL? (Eu acho que o Android sabe que o primeiro caractere da palavra é RTL ou LTR é por isso que quando a largura da visualização de texto é coincidente, alinhe o texto à direita se o caractere for RLT e à esquerda se o caractere for LTR).
Qualquer sugestão ou comentários seriam apreciados. obrigado