2017-12-11 20 views
0

私はいくつかのTableRowを受け取るTableLayoutを持っています。私がしようとしているのは、すべての要素が同じ相対サイズの行全体を埋めるように、行の要素のサイズを変更することです。レイアウトディバイダのサイズを取得するには?

リソース::

のtableView:レイアウト/ 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> 

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <size android:width="1dip" /> 
    <solid android:color="@color/colorMediumGrey" /> 
</shape> 
:描画可能/ vertical_divider @

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

私は、TableRowレイアウト上の各アイテムに等しいサイズを持つ完璧なソリューションは、各アイテムに等しい重みを定義することです。たとえば、行の数がそれぞれの項目の数と同じでない場合、項目の幅が異なります。 したがって、アイテムと行をTableViewに動的にインスタンス化するので、解決策は、行ごとのアイテムの最大数(列数)に基づいて行の各アイテムのサイズを計算することです。唯一の問題は、レイアウト上のディバイダの正しい相対的なサイズを把握できなかったことです。 レイアウトディバイダのサイズを取得する方法:だから、戻って私の元の質問に

答えて

0

は私が正しく、列の要素の幅を計算する方法を見つけました。欠けている部分は、方法getIntrinsicWidthを使用して達成された、仕切りの描画可能な相対サイズを得る方法でした。 解決策は、行あたりの要素の最大値に基づいて要素幅(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 
関連する問題