Сделать горизонтальный столбец LinearLayout для Android в GridLayout

Я пытаюсь создать представление, содержащее некоторые элементы в порядке слева направо и кнопку, прикрепленную к правому верхнему углу с фиксированным размером. Мой текущий макет:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnCount="2">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_column="0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/Image1"
            android:layout_height="40dp"
            android:layout_width="40dp"
            android:layout_marginLeft="24dp"
            android:layout_marginTop="24dp"
            android:layout_marginBottom="16dp"
            android:src="@drawable/image_src"
            android:visibility="gone" />
        <TextView
            android:id="@+id/Text1"
            android:text="SampleText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="16dp"
            android:layout_marginTop="24dp"
            android:textSize="16sp"
            android:gravity="center" />
    </LinearLayout>
    <ImageButton
        android:id="@+id/Button1"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_gravity="right"
        android:layout_column="1"
        android:src="@drawable/imageBtn"
        style="?android:attr/borderlessButtonStyle" />
</GridLayout>

Когда текст короткий, кажется, что все в порядке

Когда текст короткий - все ок:

Но проблема в том, что текст может быть очень длинным, и он перекрывает кнопку.

Неправильное изображение

Как я могу сделать кнопку всегда видимой, а текст переноситься точно в ее левый угол?


person Alexey Vukolov    schedule 13.12.2016    source источник
comment
поделитесь ожидаемым скриншотом вывода   -  person Aditya Vyas-Lakhan    schedule 13.12.2016
comment
укажите конкретные размеры для ваших представлений, чтобы убедиться, что они не перекрываются. вы можете сделать это, используя свой xml или код   -  person Charuක    schedule 13.12.2016
comment
Возможный дубликат GridLayout и Row/Column Span Woe   -  person Omar HossamEldin    schedule 13.12.2016
comment
Не уверен, но можете ли вы установить веса для представлений в линейном макете и попробовать?   -  person Raghavendra    schedule 13.12.2016
comment
Вы можете использовать Linear Layout с весом и суммой веса вместо макета сетки. Просто опубликуйте скриншот ожидаемого результата, и тогда мы сможем предложить вам лучший вариант.   -  person Newbie Android    schedule 13.12.2016
comment
Можете ли вы добавить скриншот для вашего требования и что вы получаете сейчас?   -  person Ready Android    schedule 13.12.2016
comment
Обязательно ли использовать сетку? Потому что такого же дизайна вы можете легко добиться с помощью RelativeLayout.   -  person Ready Android    schedule 13.12.2016
comment
Нет. Мне просто нужен макет, как на первом скриншоте. Но вместо первого изображения могут быть другие элементы управления (определяются во время выполнения)   -  person Alexey Vukolov    schedule 13.12.2016
comment
как сказал @ReadyAndroid, вы должны предпочесть использовать RelativeLayout или LinearLayout, вы можете добиться того, чего хотите, используя любой из этих макетов.   -  person Meet Vora    schedule 13.12.2016


Ответы (1)


Вы можете добиться этого, используя RelativeLayout. Проверьте ниже один в вашем макете xml.

<?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">

    <ImageButton
        android:id="@+id/Button1"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_alignParentRight="true"
        android:layout_marginTop="24dp"
        android:src="@mipmap/ic_launcher" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/Button1"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/Image1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginBottom="16dp"
            android:layout_marginLeft="24dp"
            android:layout_marginTop="24dp"
            android:src="@mipmap/ic_launcher"
            android:visibility="visible" />

        <TextView
            android:id="@+id/Text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="24dp"
            android:text="SampleText sdfsd sd sdf sdfs  sdfsd fsf fsdf sd s dsfs sfs sfs sdf s fsdf sdf fsdf  sdf sf sd fsdf sfsdf sfsd ffs sdf sdf sfsdf sfs sdfs sfsdfs sfs sf sfs fsfsf sf ssf "
            android:textSize="16sp" />
    </LinearLayout>
</RelativeLayout>
person Ready Android    schedule 13.12.2016
comment
Работало, но мне пришлось добавить правое поле для текста, иначе оно перекрывалось кнопкой. - person Alexey Vukolov; 13.12.2016