Android - 使 GridView 更小以垂直适应而无需滚动
Android - make GridView smaller to fit vertically without scrolling
我有一个 Gridview
,大约在屏幕的一半。它充满了 ImageViews
是二次的。问题是 GridView
填满了整个宽度,因此使其垂直滚动。
我想将 GridView 的宽度减小到垂直适合而无需滚动。我既不希望图像变形也不希望更改列大小。
我已经尝试了不同的 android:stretchMode
,但除了 columnWidth
,它根本没有显示 gridView。
简单地添加填充或边距不是我想要的,因为它应该适合所有屏幕尺寸。
这是我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<GridView
android:id="@+id/gridViewPlayer2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp" >
</GridView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Chronometer
android:id="@+id/timer_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:text="Chronometer"
android:gravity="right"
android:rotation="180" />
<Chronometer
android:id="@+id/timer_p1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:gravity="right" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<GridView
android:id="@+id/gridViewPlayer1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp" >
</GridView>
</LinearLayout>
</LinearLayout>
提前致谢。
我不明白你到底在找什么。但是您可以动态设置网格视图的宽度和网格视图的列宽。
好的,我找到了一个很好的解决方法,它完全符合我的要求。这很简单:
因为我的 GridView
是二次方的,所以我设法得到了 LinearLayout
的高度,并用该值设置了 GridView
的宽度。 (我没有直接在 GridView
上设置宽度,而是在我添加的另一个 LinearLayout 上设置宽度以解决一些导入问题)。
这是我的 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center">
<LinearLayout
android:id="@+id/layout_help_p2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<GridView
android:id="@+id/gridViewPlayer2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp"
android:rotation="180" >
</GridView>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Chronometer
android:id="@+id/timer_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:text="Chronometer"
android:gravity="right"
android:rotation="180" />
<Chronometer
android:id="@+id/timer_p1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:gravity="right" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:id="@+id/layout_grid_p1">
<LinearLayout
android:id="@+id/layout_help_p1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<GridView
android:id="@+id/gridViewPlayer1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp" >
</GridView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
下面是我如何管理所描述的过程:
final LinearLayout mLayoutP1 = (LinearLayout) findViewById(R.id.layout_grid_p1);
final LinearLayout mLayoutHelpP1 = (LinearLayout) findViewById(R.id.layout_help_p1);
final LinearLayout mLayoutHelpP2 = (LinearLayout) findViewById(R.id.layout_help_p2);
mLayoutP1.post(new Runnable(){
@Override
public void run() {
layoutHeightP1 = mLayoutP1.getHeight();
mLayoutHelpP1.setLayoutParams(new LinearLayout.LayoutParams(layoutHeightP1, LinearLayout.LayoutParams.MATCH_PARENT));
mLayoutHelpP2.setLayoutParams(new LinearLayout.LayoutParams(layoutHeightP1, LinearLayout.LayoutParams.MATCH_PARENT));
}
});
所以结果是:http://abload.de/img/4cu7w.jpg
此解决方法仅适用于我的 GridView
是二次方程。如果有人找到了一种无需滚动即可自动减小 GridView
/ListView
垂直适合屏幕宽度的方法,请随时在此处分享!
我有一个 Gridview
,大约在屏幕的一半。它充满了 ImageViews
是二次的。问题是 GridView
填满了整个宽度,因此使其垂直滚动。
我想将 GridView 的宽度减小到垂直适合而无需滚动。我既不希望图像变形也不希望更改列大小。
我已经尝试了不同的 android:stretchMode
,但除了 columnWidth
,它根本没有显示 gridView。
简单地添加填充或边距不是我想要的,因为它应该适合所有屏幕尺寸。
这是我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<GridView
android:id="@+id/gridViewPlayer2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp" >
</GridView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Chronometer
android:id="@+id/timer_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:text="Chronometer"
android:gravity="right"
android:rotation="180" />
<Chronometer
android:id="@+id/timer_p1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:gravity="right" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<GridView
android:id="@+id/gridViewPlayer1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp" >
</GridView>
</LinearLayout>
</LinearLayout>
提前致谢。
我不明白你到底在找什么。但是您可以动态设置网格视图的宽度和网格视图的列宽。
好的,我找到了一个很好的解决方法,它完全符合我的要求。这很简单:
因为我的 GridView
是二次方的,所以我设法得到了 LinearLayout
的高度,并用该值设置了 GridView
的宽度。 (我没有直接在 GridView
上设置宽度,而是在我添加的另一个 LinearLayout 上设置宽度以解决一些导入问题)。
这是我的 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center">
<LinearLayout
android:id="@+id/layout_help_p2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<GridView
android:id="@+id/gridViewPlayer2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp"
android:rotation="180" >
</GridView>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Chronometer
android:id="@+id/timer_p2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:text="Chronometer"
android:gravity="right"
android:rotation="180" />
<Chronometer
android:id="@+id/timer_p1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="20sp"
android:gravity="right" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:id="@+id/layout_grid_p1">
<LinearLayout
android:id="@+id/layout_help_p1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<GridView
android:id="@+id/gridViewPlayer1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:gravity="center"
android:layout_gravity="center"
android:stretchMode="columnWidth"
android:horizontalSpacing="3dp"
android:verticalSpacing="3dp" >
</GridView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
下面是我如何管理所描述的过程:
final LinearLayout mLayoutP1 = (LinearLayout) findViewById(R.id.layout_grid_p1);
final LinearLayout mLayoutHelpP1 = (LinearLayout) findViewById(R.id.layout_help_p1);
final LinearLayout mLayoutHelpP2 = (LinearLayout) findViewById(R.id.layout_help_p2);
mLayoutP1.post(new Runnable(){
@Override
public void run() {
layoutHeightP1 = mLayoutP1.getHeight();
mLayoutHelpP1.setLayoutParams(new LinearLayout.LayoutParams(layoutHeightP1, LinearLayout.LayoutParams.MATCH_PARENT));
mLayoutHelpP2.setLayoutParams(new LinearLayout.LayoutParams(layoutHeightP1, LinearLayout.LayoutParams.MATCH_PARENT));
}
});
所以结果是:http://abload.de/img/4cu7w.jpg
此解决方法仅适用于我的 GridView
是二次方程。如果有人找到了一种无需滚动即可自动减小 GridView
/ListView
垂直适合屏幕宽度的方法,请随时在此处分享!