Robię badania na temat możliwości dynamicznego zmieniania interfejsu użytkownika na podstawie kierunku tekstu. Chociaż Google obsługuje języki RTL (patrz: Native RTL support in Android 4.2), ale nie obejmuje sytuacji, w której aplikacja zawiera mieszankę zawartości LTR i RTL.Jak uzyskać kierunek tekstu w systemie Android i dynamicznie zmieniać układ zgodnie z kierunkiem?
Rozwiązanie Google jest dobre, jeśli mamy aplikację wielojęzyczną i ma różne źródła danych statycznych (np. Pozycje menu) w różnych językach. Jednak nie znalazłem żadnego innego dokumentu dotyczącego dynamicznej zmiany układu w zależności od kierunku zawartości tekstu.
Poniższa ilustracja przedstawia aktualny projekt mojej aplikacji testowej. Lista pochodzi z Facebooka (lista moich znajomych) i zawiera angielskie i perskie nazwy.
Moje rozwiązanie jest o dwa układy (jeden dla LTR i jeden dla RTL) w adapterze i przypisanie każdemu oparciu o kierunku nazwie. Tak, napisałem następujące wiersze kodu:
@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;
}
i wynik brzmi:
I lustrzane wiersze na podstawie jeśli wiersz jest parzyste, czy nieparzyste. Teraz moje pytanie brzmi: jak lustrzany interfejs użytkownika oparty na nazwie. Myślę, że powinienem zmienić warunek klauzuli z if(position % 2 == 0)
na coś takiego jak if(isNameLTR(FIRST_CHAR_OF_NAME))
. Nie mam pojęcia, jak wdrożyć tę metodę.
Skąd mogę wiedzieć, że postać to LTR ot RTL? (Wydaje mi się, że Android zna pierwszą literę słowa, to RTL lub LTR, dlatego gdy szerokość tekstu jest zgodna z matką, wyrównuje tekst do prawej, jeśli znak jest RLT, a lewy, jeśli znak jest LTR).
Wszelkie sugestie lub komentarze będą mile widziane. Dzięki