0

Я пытаюсь создать сетку, которая работает как на ландшафте, так и на портрете на планшете. У меня только 2 столбца, но я столкнулся с проблемой, задающей ширину для ребенка.Android. Установка ширины дочернего элемента fill_parent в GridLayout приводит к тому, что ребенок обрезается.

Устанавливается GridLayout по match_parent. Затем я пытаюсь установить TextView внутри GridLayout на match_parent, думая, что он будет растягиваться в пределах GridLayout. Но я вижу, что ширина TextView находится над краем экрана. (Смотрите скриншот)

Problem with GridLayout clipping

Если я удалить TextView в колонке 0, он будет растягиваться правильно.

Вот мой XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:weightSum="1"> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/linearLayout3"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:id="@+id/textView17" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_column="7" 
    android:layout_row="0" 
    android:orientation="horizontal" 
    android:layout_rowSpan="21" 
    android:layout_gravity="center_horizontal|left" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/linearLayout4"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="119dp" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
     android:gravity="center_vertical|center_horizontal"> 

     <ImageButton 
      android:id="@+id/phonebtn" 
      android:layout_width="75dp" 
      android:layout_height="75dp" 
      android:layout_gravity="center" 
      android:adjustViewBounds="false" 
      android:background="@drawable/phonebtn_cchange" 
      android:cropToPadding="true" 
      android:scaleType="fitXY" /> 

    </LinearLayout> 

    <GridLayout 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/linearLayout3" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:id="@+id/textView127" 
     android:layout_row="0" 
     android:layout_column="0" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:id="@+id/textView128" 
     android:layout_row="0" 
     android:layout_column="1" /> 
</GridLayout> 

</RelativeLayout> 

Я предполагаю, что я устанавливаю вес неправильно, или диапазон цв, но я не уверен. Любая помощь будет оценена по достоинству.

ответ

1

Вы можете поместить ребенка TextView, установив его ширину как 0dp и его весовые параметры макета как «заполнить». Поэтому GridLayout будет знать, что ширина TextView равна ширине столбца.

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:columnCount="2"> 

    <ImageView 
     android:layout_height="@dimen/list_item_height" 
     android:src="@drawable/ic_image"/> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_gravity="fill" 
     android:gravity="center_vertical"/> 
+0

Это то, что я искал. Спасибо! – taciosd