继续提出这个问题Layout dynamic grid in middle
我有一个网格。它具有不同的宽度,具体取决于用户的操作。有时它可能是4 * 3其他时间2 * 5
宽度也可以大于4。
我的问题是网格本身的宽度始终相同,细胞伸展以填充它。这意味着2 * 5的单元宽度是4 * 3单元宽度的两倍。理想情况下,我希望网格宽度调整。它应该只是columnWidth * numOfColumns。
下面我的xml的宽度为175px,我认为这是造成这种情况的原因。当我把它设为wrap_content时,它会占用屏幕的整个宽度并忽略我的两个填充视图。
有人可以帮忙吗? 感谢
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:background="#C8C8C8"
android:orientation="horizontal">
<View
android:background="#C8C8C8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"/>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view"
android:background="#FF000000"
android:layout_width="175px"
android:layout_height="wrap_content"
android:numColumns="5"
android:columnWidth="35dp"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
/>
<!--android:layout_width="wrap_content"-->
<View
android:background="#FFC8C8C8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"/>
</LinearLayout>
为了澄清我之后的事情。
上半部分包含一个理想的中心网格。 单元格宽度应相同(理想情况下高度相同,因此为正方形) 在上面的LinearLayout下面有一个列表,如果网格占用太多空间(但不应占用超过50%的屏幕),它应该变小;
答案 0 :(得分:1)
您需要将grid_view
的宽度设置为wrap_content
和center_horizontal = "true"
,而不是制作适配器,并在getView()
中将单元格宽度和高度设置为固定值方法(从dp计算),之后您将更改代码中的单元格数 - 网格视图将更改其宽度以适合单元格数*每个单元格的宽度
//cellWidth = width of each cell including paddings
//gridRowsNumber = number of cells in width
//gridColsNumber = number of cells in height
// in activity's of fragment's onCreate();
gridView.getLayoutParams().width = cellWidth * gridRowsNumber;
gridView.getLayoutParams().height = cellWidth * gridColsNumber;
布局
<GridView
android:id="@+id/grid_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@android:color/white"
android:numColumns="5"
android:scrollbars="none">
</GridView>
适配器中的
public View getView (int position, View convertView, ViewGroup parent)
{
...
holder.cellView.getLayoutParams().height = cellWidth;
holder.cellView.getLayoutParams().width = cellWidth;
...
}