2017-12-11 10 views
0

일부 TableRows를받는 TableLayout이 있습니다. 내가하려는 것은 행의 요소 크기를 조정하여 모든 요소가 동일한 상대 크기로 전체 행을 채우도록하는 것입니다.레이아웃 분배기 크기를 얻는 방법?

자원 ::

의 TableView :

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/attributeLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:id="@+id/backgroundFrame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="#008888" 
     android:visibility="visible" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical"> 

     <ImageView 
      android:id="@+id/attributeIcon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:tint="@color/white" 
      android:src="@mipmap/attribute_icon_pet"/> 

     <TextView 
      android:id="@+id/attributeValue" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/white" 
      android:text="Dog"/> 

    </LinearLayout> 

</FrameLayout> 

드로어 블/사진 vertical_divider @ :

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <size android:width="1dip" /> 
    <solid android:color="@color/colorMediumGrey" /> 
</shape> 
레이아웃/cell_attribute (요소의 레이아웃) @

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/attributesTableLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingStart="20dp" 
    android:paddingEnd="20dp"> 

    <TableRow 
     android:divider="@drawable/vertical_divider" 
     android:dividerPadding="10dp" 
     android:showDividers="middle" 
     android:visibility="gone" 
     tools:visibility="visible"> 

     <include layout="@layout/cell_attribute" /> 

     <include layout="@layout/cell_attribute" /> 

     <include layout="@layout/cell_attribute" /> 

     <include layout="@layout/cell_attribute" /> 

    </TableRow> 

</TableLayout> 

TableRow 레이아웃의 각 항목에 동일한 크기를 갖는 완벽한 솔루션은 각 항목에 대해 동일한 가중치를 정의하는 것입니다. 예 :

<include layout="@layout/cell_attribute" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"/> 

하지만 문제는 행에 각각 동일한 수의 항목이 없으면 항목의 너비가 달라집니다. 그래서 항목 및 행을 TableView에 동적으로 인스턴스화하기 때문에 해결 방법은 행당 최대 항목 수 (열 수)에 따라 행의 각 항목 크기를 계산하는 것입니다. 유일한 문제는 레이아웃에서 디바이더의 정확한 상대 크기를 파악할 수 없다는 것입니다.

다시 원래의 질문 : 레이아웃 분배기 크기를 얻는 방법?

답변

0

열에있는 요소의 너비를 올바르게 계산하는 방법을 발견했습니다. 누락 된 조각은 방법 getIntrinsicWidth을 사용하여 달성 한 분할 자의 드로어 블 상대적 크기를 얻는 방법이었습니다. 그래서 해결책은 행 당 요소의 최대 값을 기준으로 요소 width (columnWidth 변수)를 계산하는 것입니다. 작업을 수행하기 위해 만든 코드는 다음과 같습니다.

// Divider drawable for each row 
Drawable dividerDrawable = context.getResources().getDrawable(R.drawable.vertical_divider); 

// Measure column width (Elements width) 
int totalDividersPerRowSize = dividerDrawable.getIntrinsicWidth() * (maxItemsByRow - 1); // The separators' total size 
int columnWidth = table.getMeasuredWidth() - totalDividersPerRowSize; // columnWidth subtracting dividers 
columnWidth -= table.getPaddingStart() + table.getPaddingEnd(); 
columnWidth /= maxItemsByRow; // max quantity of items divided by the table total width