gpt4 book ai didi

android - 如何获取布局分隔线大小?

转载 作者:行者123 更新时间:2023-11-30 00:13:26 27 4
gpt4 key购买 nike

我有一个接收一些 TableRow 的 TableLayout。我想要做的是调整行中元素的大小,以便所有元素以相同的相对大小填充整行。

资源::

表格 View :

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

我知道要让 TableRow 布局上的每个项目具有相同大小的完美解决方案是为每个项目定义相同的权重。例如:

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

但问题是,如果每行上的项目数量不同,则这些项目将具有不同的宽度。因此,由于我将项目和行动态实例化到 TableView,因此解决方案是根据每行的最大项目数量(列数)计算行中每个项目的大小。唯一的问题是我无法找出布局上分隔线的正确相对大小。

回到我最初的问题:如何获取布局分隔线大小?

最佳答案

我找到了一种正确计算列上元素宽度的方法。缺少的部分是如何获取分隔线的可绘制相对大小,这是使用方法 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

关于android - 如何获取布局分隔线大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47752226/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com