我有一个接收一些表格的tableLayout。我要做的是调整行上的元素大小,以便所有元素都以相同的相对大小填充整个行。
资源::
tableview:
<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>
@layout/cell_attribute(元素的布局):
<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>
@drawable/vertical_divider:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:width="1dip" />
<solid android:color="@color/colorMediumGrey" />
</shape>
我知道,对于桌面布局上每个项目具有相同尺寸的完美解决方案是为每个项目定义相等的权重。例如:
<include layout="@layout/cell_attribute"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
,但问题是,如果行上没有相同数量的项目,则项目将具有不同的宽度。因此,由于我将项目实例化并动态到表视图,因此解决方案是根据每行的最大项目(列数)计算行上每个项目的大小。唯一的问题是,我无法找出布局上分隔线的正确相对大小。
所以回到我最初的问题:如何获得布局分隔尺寸?
我找到了一种正确计算列上元素宽度的方法。缺失的部分是如何获得使用方法 getIntrinsicwidth 来获得分隔符的相对大小。因此,发现的解决方案是根据每行元素的最大值计算元素宽度(列变量)。为完成这项工作而创建的代码是:
// 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