Android TextView Выравнивание текста вправо и влево

Я пытаюсь иметь TextView, который имеет две части текста, одну выровненную против крайнего левого и одну в крайнем левом углу. Я могу помещать пробелы между двумя словами, но мне было интересно, есть ли лучшая техника?

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/background_common" android:id="@+id/LinearLayout0123"> <TextView android:layout_width="300dp" android:layout_height="40dp" android:textColor="@color/Black" android:textStyle="bold" android:textSize="15dp" android:paddingLeft="10dp" android:paddingTop="10dp" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:background="@drawable/selector_social_facebook_twitter" android:text="Right Text Left Text" /> </LinearLayout> 

Вот еще один способ:

 <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/background_common"> <TextView android:text="Left Text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left"/> <TextView android:text="Right Text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right"/> </FrameLayout> 

Layout_gravity сообщает родительскому объекту, куда следует поместить ребенка. В FrameLayout дети могут отправиться в любую точку мира и свободны от других детей. Если есть перекрытие, последний добавленный ребенок находится сверху. Удачи!

Почему бы не иметь два текстовых изображения вместо того, чтобы помещать текст в один textView

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="300dip" android:layout_height="fill_parent" android:background="@drawable/background_common" android:id="@+id/LinearLayout0123"> <TextView android:layout_weight="1" android:layout_width="0dip" android:layout_height="40dp" android:textColor="@color/Black" android:textStyle="bold" android:textSize="15dp" android:paddingLeft="10dp" android:paddingTop="10dp" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:background="@drawable/selector_social_facebook_twitter" android:text="Left Text" /> <TextView android:layout_weight="1" android:layout_width="0dip" android:layout_height="40dp" android:textColor="@color/Black" android:textStyle="bold" android:textSize="15dp" android:paddingLeft="10dp" android:paddingTop="10dp" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:background="@drawable/selector_social_facebook_twitter" android:text="Right Text" /> </LinearLayout> 

Вы можете установить android: gravity = "right" в правом текстовом поле, если вы хотите, чтобы текст был выровнен вправо

Это может быть лучше, потому что это не позволяет перекрывать тексты.

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="start" /> <TextView android:id="@+id/sub_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1 android:layout_gravity="end" /> </LinearLayout> 

Это определенно сработает для вас …

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:text="Left Side" android:textSize="15sp" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:text="Right Side" android:textSize="15sp" android:textStyle="bold" /> </RelativeLayout> 

Если вам нужна только одна строка (метка: … значение или что-то в этом роде), вы можете достичь этого, используя диапазон выравнивания . Единственная проблема заключается в том, что диапазон работает для всего абзаца, поэтому вы должны поместить свои левые / правые тексты в отдельные абзацы и объединить их с использованием диапазона «нуль-линия-высота» в одну строку.

Что-то вроде этого:

 public void setLeftRightText(TextView view, String left, String right) { SpannableString merged = new SpannableString(left + "\n" + right); merged.setSpan( new AlignmentSpan.Standard(Layout.Alignment.ALIGN_NORMAL), 0, left.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE ); merged.setSpan( new LineOverlapSpan(), left.length(), left.length() + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE ); merged.setSpan( new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE), left.length() + 1, left.length() + 1 + right.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE ); view.setText(merged); } 

Где LineOverlapSpan реализуется следующим образом:

 public class LineOverlapSpan implements LineHeightSpan { @Override public void chooseHeight(final CharSequence text, final int start, final int end, final int spanstartv, final int v, final Paint.FontMetricsInt fm) { fm.bottom += fm.top; fm.descent += fm.top; } } 

См. Этот ответ для получения более подробной информации.

Intereting Posts
Что такое RestrictionPolicy и как заставить его заткнуться? Как сохранить состояние во время изменения ориентации в Android, если состояние сделано из моих классов? Android :: Расширение MapActivity => classNotFound Exception Android Proguard – это лучшая практика для всех сторонних библиотек? Как я могу принимать входные данные на нескольких языках в android Как исключить элемент из FirebaseRecyclerAdapter Уведомление Действие без запуска новой активности? Использование атрибутов уровня API за пределами minSdkVersion Фрагмент становится видимым Почему мое приложение Android использует процессор в фоновом режиме? OnPrepareActionMode не вызывается при создании ActionMode Текстовое поле html в WebView в приложении Android скрыто с помощью мягкой клавиатуры Ошибка: не удалось запустить SDK-инструмент mksdcard Как изменить новый цвет и высоту индикатора TabLayout Закрытие открытого ключа в моем приложении