2015-06-15 2 views
4

Я пытаюсь выровнять TextView с центром в относительной компоновке, но также и справа от ImageView. Я бы хотел, чтобы это выглядело так.Относительная компоновка, выравнивание центра родительского элемента и справа от вида без перекрытия

[-(image)-----some text here------------] 

Я могу сделать это с помощью приведенного ниже кода, но если текст становится слишком длинным, он перекрывает изображение.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:paddingTop="@dimen/small_padding" 
    android:paddingBottom="@dimen/small_padding" 
    android:background="@color/White"> 

    <ImageView 
     android:id="@+id/navMenu" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/home_icon" 
     android:layout_marginEnd="@dimen/small_padding" 
     android:contentDescription="@string/abc_search_hint" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:id="@+id/actionBarTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/profile" 
     android:textSize="24sp" 
     android:textStyle="bold" 
     android:textColor="@color/Black" 
     android:maxLines="1" 
     android:ellipsize="end" 
     android:contentDescription="@string/title_activity_connect" 
     android:layout_centerInParent="true" /> 

</RelativeLayout> 

Я попытался совместив TextView справа от ImageView, но она перестает центрирование родителя, если я могу это сделать. Подсказка:

+0

ли ImageView нужно сидеть над TextView и позволяют текст для заполнения за ним? Или это должно быть как изображение, которое всегда сидит слева от текста, а левая рука TextView ограничена им? –

+0

@ DanielGruici Это горизонтальная компоновка. Представление изображения ДОЛЖНО оставаться полностью выровненным, а текст ДОЛЖЕН оставаться в центре в макете PARENT, а не в остальном пространстве справа от изображения. Как работает текущий код, если текст слишком длинный, тогда он перекрывает изображение влево –

+0

Единственное, что я могу представить, это LinearLayout с весами. Создайте горизонтальную компоновку, а слева - ImageView, а средний - TextView, а правый - пустой. Дайте равные веса изображению и пустому виду, придайте больший вес текстовому виду. Тогда гравитация текста может быть установлена, будет всегда центрироваться и быть связана двумя другими видами внутри. Вам, вероятно, придется столкнуться с весами, чтобы они выглядели так, как вы хотите. –

ответ

1

Вы можете попробовать что-то вроде этого. Для этого я использовал радиогруппу вместо линейной компоновки, но она все равно должна работать. Имеют линейную компоновку по горизонтали, как вы уже сделать, а затем сделать центр тяжести макет затем просто поместить изображение первого, то вид текста

<RadioGroup 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:layout_gravity="center" 
       android:paddingTop="20dp"> 

        <RadioButton 
         android:id="@+id/radio_student" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/checkbox_student" 
         android:onClick="onRadioButtonClicked" 
         android:layout_marginEnd="30dp" 
         android:layout_marginRight="30dp"/> 

        <RadioButton 
         android:id="@+id/radio_teacher" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/checkbox_teacher" 
         android:onClick="onRadioButtonClicked" 
         android:layout_marginStart="30dp" 
         android:layout_marginLeft="30dp"/> 

      </RadioGroup> 

EDIT: Я не знаю, если маржинальные атрибуты для кнопок I есть работа над видом текста, но заполнение слева от текста может работать

+0

Моя проблема - перекрытие, а не выравнивание. Кроме того, я не использую linearlayout, я использую относительный. Это так, что я могу выровнять текстуру, расположенную внутри нее, одновременно размещая изображение влево.С таким количеством дисплеев и так много размеров с использованием полей для попытки обхода не получится –

0

попробовать это:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:paddingTop="@dimen/small_padding" 
    android:paddingBottom="@dimen/small_padding" 
    android:background="@color/White"> 

    <ImageView 
     android:id="@+id/navMenu" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/home_icon" 
     android:layout_marginEnd="@dimen/small_padding" 
     android:contentDescription="@string/abc_search_hint" 
     android:layout_alignParentStart="`enter code here`true" /> 

    <TextView 
     android:id="@+id/actionBarTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/profile" 
     android:textSize="24sp" 
     android:textStyle="bold" 
     android:textColor="@color/Black" 
     android:maxLines="1" 
     android:ellipsize="end" 
     android:contentDescription="@string/title_activity_connect" 
     android:layout_toRightOf="@+id/navMenu" 
     android:alignParentRight="true" 
     android:gravity="center" /> 

</RelativeLayout> 
+0

вы не можете установить силу тяжести для элементов внутри относительного макета –

+0

Я отредактировал ваш код, попробуйте –

+1

Я сделал, он центрирует текст внутри TextView. Мне нужно сосредоточить TextView внутри родительского относительного макета. –

0

Вы можете (и должны, для выполнения сакэ), используйте соединение Drawable для TextView (и избавиться от ImageView)

Вы хотите изображение, чтобы остаться на левой части TextView, поэтому используйте android:drawableLeft:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="@dimen/small_padding" 
    android:paddingBottom="@dimen/small_padding" 
    android:background="@color/White" 
    > 
    <TextView 
     android:id="@+id/actionBarTitle" 
     android:drawableLeft="@drawable/home_icon" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/profile" 
     android:textSize="24sp" 
     android:textStyle="bold" 
     android:textColor="@color/Black" 
     android:maxLines="1" 
     android:ellipsize="end" 
     android:contentDescription="@string/title_activity_connect" 
     android:centerInParent="true" 
     android:gravity="center" 
    />  
</RelativeLayout> 
+0

. Таким образом, проблема заключается в том, что это также перемещает изображение в центр макета. Если я изменяю атрибут width для соответствия родительскому, он почти работает. Однако тогда текст находится в центре оставшегося пространства справа от изображения. Мне нужно, чтобы изображение оставалось выровненным слева, а текст оставался центрированным внутри основного родительского макета. Вот почему это сложно. –

Смежные вопросы