我正在尝试在 android studio 中创建一个应用程序,由于某些原因,一个 gridLayout 决定不显示,尽管它在屏幕上占用了必要的空间。 ,
布局的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:background="#cbcde6"
android:orientation="vertical"
android:gravity="top|center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Insert data"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="top"
android:columnCount="3"
android:rowCount="3"
android:visibility="visible">
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_columnWeight="1"/>
</GridLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Calculate"
android:textAppearance="?android:attr/textAppearanceLarge"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Result is: "
android:textAppearance="?android:attr/textAppearanceLarge"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Result"
android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/backButton_text"
android:id="@+id/back"
android:onClick="onClickBackButton"
android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>
</LinearLayout>
提供 第一行第一列
<EditText
android:background="#ffffff"
android:layout_height="30sp"
android:layout_margin="15dp"
android:layout_row="0"
android:layout_column="0" />
第一行第二列
android:layout_row="0"
android:layout_column="1"
根据行和列为每个孩子做这件事
android:layout_columnWeight 仅适用于 api 21 或更高版本,根据您设备中的屏幕截图,我猜测较低。
由于 edittext 没有指定宽度,也没有文本定义它以 0 宽度显示,这就是为什么你似乎看不到它。
我建议通过代码定义宽度和边距,以实现您在工作室屏幕截图上显示的内容:
为网格布局定义一个名称,我在示例中使用“gridlayout”
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridLayout g = (GridLayout)findViewById(R.id.gridlayout);
int screenWidth = getScreenWidth();
int cellWidth = screenWidth / 4;
int margin = cellWidth / 8;
GridLayout.LayoutParams p;
for(int i = 0; i < g.getChildCount(); i++){
p = (GridLayout.LayoutParams)g.getChildAt(i).getLayoutParams();
p.width = cellWidth;
p.setMargins(margin, margin, margin, margin);
}
}
private int getScreenWidth(){
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
return size.x;
}
它将为任何设备和任何方向设置相同的外观。