Sto facendo qualche ricerca sulla possibilità di modificare l'interfaccia utente in modo dinamico in base alla direzione di un testo. Sebbene Google supporti le lingue RTL (riferimento: Native RTL support in Android 4.2) ma non copre una situazione in cui l'applicazione presenta un mix di contenuti LTR e RTL.Come ottenere la direzione del testo in Android e modificare il layout in modo dinamico in base alla direzione?
La soluzione di Google è giusta se abbiamo un'app multilingue e ha diverse fonti di dati statici (come voci di menu) in diverse lingue. Tuttavia, non ho trovato nessun altro documento riguardo a come modificare il layout in modo dinamico in base alla direzione del contenuto del testo.
L'immagine seguente mostra il design corrente della mia app di prova. La lista proviene da Facebook (lista dei miei amici) e contiene nomi inglesi e persiani.
La mia soluzione è avere due layout (uno per LTR e uno per RTL) in adattatore e assegnando ad ogni uno basato sulla direzione di nome. Così, ho scritto seguenti righe di codice:
@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 il risultato è:
ho specchiato righe in base a se fila è pari o dispari. Ora, la mia domanda è come rispecchiare l'interfaccia utente in base al nome. Penso che dovrei cambiare la condizione della clausola da if(position % 2 == 0)
a qualcosa come if(isNameLTR(FIRST_CHAR_OF_NAME))
. Non ho idea di come implementare questo metodo.
Come posso sapere che un carattere è LTR o RTL? (penso che Android sappia che il primo carattere di parola è RTL o LTR è per questo che quando la larghezza della vista del testo è uguale a quella del padre allinea il testo a destra se il carattere è RLT e a sinistra se il carattere è LTR).
Qualsiasi suggerimento o commento sarebbe apprezzato. Grazie