布局如何水平和垂直适应内容?

时间:2015-03-31 02:26:02

标签: android android-layout

有没有办法创建一个水平wrap_content的布局,如果该行已满,则将其余部分放在新行中。

示例:

如果我创建一个方向设置为水平的线性布局,然后我创建三个按钮填充屏幕大小(按钮)(按钮)(按钮),现在如果我添加更多按钮,它将以非常丑陋的方式放置在队伍的尽头。我想要的是将新按钮放在新行中,并且我不想创建多个布局,因为这些按钮是根据API输入从java动态放置的。无论如何要做到这一点,或者我只需设计一个功能来处理它?<​​/ p>

3 个答案:

答案 0 :(得分:1)

如果动态添加了View,您可能希望使用GridView,因为它使用Adapter来获取将在屏幕上显示的View(与ListView相同。但是,如果您要将View添加到设计时的布局中,也许您可​​以使用GridLayout

Xamarin对GridLayout检查here

有一个很好的解释

您也可以在SO中查看this question,以查看GridViewGridLayout之间更详细的差异:

答案 1 :(得分:0)

如果您的按钮的宽度不同,那么您可以使用GridViewandroid:numColumns设置为auto_fit,如果第一行已填充按钮,则下次添加时将在网格的下一行/行中添加一个按钮。

假设您有一个宽度为match_parent的按钮,则添加的下一个按钮将位于下一行,因此如果您有固定按钮宽度,则会添加按钮彼此相邻,直到填满网格视图宽度,下一个按钮将在下一行。

如果你想实现gridview,那么你可以去here

答案 2 :(得分:0)

考虑GridView,请参阅Android Developer

您应该在your_layout.xml中定义网格视图容器

<your.package.ButtonsGridView
android:id="@+id/buttonsGridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:stretchMode="columnWidth" />

然后将GridView扩展为名为ButtonsGridView的自定义类

然后将ArrayAdapter<T>扩展为名为ButtonsAdapter的自定义类,以管理数据。

并将ButtonsAdapter设为ButtonsGridView

ButtonsGridView buttonsGridView = (ButtonsGridView) findViewById(R.id.buttonsGridView);
ButtonsAdapter buttonsAdapter = new ButtonsAdapter(Context);
buttonsGridView.setAdapter(buttonsAdapter);

考虑到不同的按钮宽度,您可以在适配器的方法public View getView(int position, View convertView, ViewGroup parent)中管理宽度,您可以执行任何您想要自定义的按钮。

请参阅此问题并回答Grid View change column number runtime?以更改列号。