Ich recherchiere über die Möglichkeit, die Benutzeroberfläche dynamisch zu ändern, basierend auf der Richtung eines Textes. Obwohl Google RTL-Sprachen unterstützt (Ref: Native RTL support in Android 4.2), deckt es jedoch keine Situation ab, in der die Anwendung eine Mischung aus LTR- und RTL-Inhalten aufweist.Wie bekomme ich die Textrichtung in Android und ändere das Layout dynamisch entsprechend der Richtung?
Die Lösung von Google ist richtig, wenn wir eine mehrsprachige App haben und verschiedene Quellen für statische Daten (wie Menüeinträge) in verschiedenen Sprachen haben. Ich habe jedoch kein anderes Dokument gefunden, das sich mit der dynamischen Änderung des Layouts aufgrund der Richtung des Textinhalts befasst.
Das folgende Bild zeigt das aktuelle Design meiner Test-App. Liste kommt von Facebook (Liste meiner Freunde) und enthält englische und persische Namen.
Meine Lösung ist, die zwei Layouts (eine für LTR und eine für RTL) in Adapter und jeder auf Richtung Namen basierend zuzuordnen. Also, ich schrieb folgende Zeilen Code:
@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;
}
und Ergebnis ist:
I Reihen gespiegelt basierend auf, wenn Zeile gerade oder ungerade ist. Nun ist meine Frage, wie UI basierend auf dem Namen zu spiegeln. Ich denke, ich sollte die Klausel Bedingung von if(position % 2 == 0)
zu etwas wie if(isNameLTR(FIRST_CHAR_OF_NAME))
ändern. Ich habe keine Ahnung, wie ich diese Methode implementieren soll.
Wie kann ich wissen, ein Zeichen ist LTR oder RTL? (Ich denke, Android weiß, dass das erste Zeichen des Wortes RTL oder LTR ist, deshalb wird, wenn die Breite der Textanzeige übereinstimmt, der Text nach rechts ausgerichtet, wenn das Zeichen RLT ist, und nach links, wenn das Zeichen LTR ist).
Jeder Vorschlag oder Kommentare würden geschätzt. Dank