我有一个GridLayout(我以编程方式添加子项)。
结果很难看,因为GridLayout没有填满所有可用空间。
这是结果:
这是我的XML:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v7.widget.GridLayout
android:id="@+id/gridlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" >
</android.support.v7.widget.GridLayout>
</HorizontalScrollView>
</ScrollView>
答案 0 :(得分:7)
我认为布局的行为一切都很好。
GridLayout 的android:layout_width="match_parent"
设置(位于 HorizontalScrollView 内)无效。插入 GridLayout 的单个子视图确定 GridLayout的实际宽度(高度,如果您使用垂直 ScrollView 容器),可以大于父级的屏幕宽度( width = match_parent 设置因此在此处没有效果;也适用于子视图)。 GridLayout 的列和行具有插入的最大子视图的大小(为此列/行指定)。
这整体是一个非常动态的结构。将自动重新计算列数和行数。请记住使用 layout_row 和 layout_column 标记子视图,并可能设置所需的大小 - 遵循上述规则,例如:
<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:inputType="text"
android:id="@+id/editText1"
android:layout_row="2"
android:layout_column="8" />
因此,通过更改子视图的宽度,您可以控制GridLayout的列宽度。您可以学习以下示例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:background="#f3f3f3">
<GridLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="#a3ffa3">
<Button
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Col 1,Row4"
android:id="@+id/button"
android:layout_gravity="center"
android:layout_row="4"
android:layout_column="1" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start.."
android:layout_column="4"
android:layout_row="8" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Col 6, Row 1."
android:id="@+id/button2"
android:layout_row="1"
android:layout_column="6" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Col 6, Row 2."
android:id="@+id/button3"
android:layout_row="2"
android:layout_column="6" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button4"
android:layout_gravity="center"
android:layout_column="9"
android:layout_row="3" />
<TextView
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_row="3"
android:layout_column="8" />
<CheckBox
android:layout_width="250dp"
android:layout_height="wrap_content"
android:text="New CheckBox"
android:id="@+id/checkBox"
android:layout_row="6"
android:layout_column="7"
android:textColor="#212995" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:ems="10"
android:id="@+id/editText"
android:layout_row="5"
android:layout_column="8"
android:textColor="#952a30" />
</GridLayout>
</HorizontalScrollView>
</LinearLayout>
我希望这很有帮助。最诚挚的问候:)
此外: 我发现以上可能实际上很难在程序上实现。您可能正在考虑将GridLayout更改为GridView或TableLayout,这些更容易处理。要了解有关它的更多信息,请查看以下网站:
答案 1 :(得分:4)
你应该修改你的
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" >
并添加android:fillViewPort="true"
。这应该使内容拉伸以填充屏幕(即视口)。
答案 2 :(得分:2)
TextView reps = new TextView(this);
android.support.v7.widget.GridLayout.LayoutParams repsLayoutParam = (LayoutParams) reps.getLayoutParams();
repsLayoutParam.setGravity(Gravity.FILL_HORIZONTAL | Gravity.FILL_VERTICAL);
这将创建一个放置在网格布局中的文本视图 - 将重力设置为FILL_HORIZONTAL,并且FILL_VERTICAL应确保它填充布局中的单元格。
答案 3 :(得分:1)
因为网格视图有自己的滚动。
答案 4 :(得分:1)
添加视图时,请记得首先将正确的LayoutParams
添加到视图中。
答案 5 :(得分:0)
Mabye是因为缺少了
</ScrollView>
最后。