Java Android:嵌套的Linearlayouts将不显示按钮网格,与父项匹配

Java Android:嵌套的Linearlayouts将不显示按钮网格,与父项匹配,java,android,android-linearlayout,Java,Android,Android Linearlayout,我有一个应用程序正在建设中。在其中一个子菜单中,我需要通用的按钮显示,因此我想做一个活动,可以显示给定数量的所需按钮 我已经成功地通过编程实现了这一点,但我希望按钮的总网格填充它们所在的整个父级,这恰好是横向屏幕的3/4。按钮的数量从16到38不等 我还成功地用其他按钮网格实现了这一点,它们是xml格式、权重值和条目的匹配父值 当我以编程方式为按钮或行分配match_父值时,它会占据整个父布局,而不是像我期望的那样共享它,即使它们的权重值相同,为1.0f 相关代码如下。我也想张贴图片,但我没有这

我有一个应用程序正在建设中。在其中一个子菜单中,我需要通用的按钮显示,因此我想做一个活动,可以显示给定数量的所需按钮

我已经成功地通过编程实现了这一点,但我希望按钮的总网格填充它们所在的整个父级,这恰好是横向屏幕的3/4。按钮的数量从16到38不等

我还成功地用其他按钮网格实现了这一点,它们是xml格式、权重值和条目的匹配父值

当我以编程方式为按钮或行分配match_父值时,它会占据整个父布局,而不是像我期望的那样共享它,即使它们的权重值相同,为1.0f

相关代码如下。我也想张贴图片,但我没有这样做的声誉

`LinearLayout布局=(LinearLayout)findViewById(R.id.linear\u custom\u draw); 布局。设置方向(线性布局。垂直)

int columns=Math.min(6,4+类别)//将每行的按钮数设置为4-6
对于(int i=0;i<4+类别;i++){
LinearLayout行=新的LinearLayout(该行);
row.setLayoutParams(新的android.view.ViewGroup.LayoutParams(android.view.WindowManager.LayoutParams.MATCH_父级,
android.view.WindowManager.LayoutParams.MATCH_PARENT); //与xml定义的尝试不同,上面的一行填充了整个linearlayout,尽管有更多的条目。 行。设置方向(线性布局。水平); 行设置权重总和(1.0f); 如果(i%2==0){ row.setBackgroundColor(getResources().getColor(R.color.listview_red_backgr_color)); }

        for (int j = 0; j < columns; j++) {
            int index = (i*columns)+j;
            if(formations.size() > index){
                Button btnTag = new Button(this);
                btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                btnTag.setText(formations.get(index).getName());
                btnTag.setTextColor(getResources().getColor(R.color.black_overlay));    
                btnTag.setId(formations.get(index).getId());
                row.addView(btnTag);
            }
        }

        layout.addView(row);`
for(int j=0;j索引){
按钮btnTag=新按钮(此按钮);
btnTag.setLayoutParams(新的LayoutParams(LayoutParams.WRAP_内容,LayoutParams.WRAP_内容));
btnTag.setText(formations.get(index.getName());
btnTag.setTextColor(getResources().getColor(R.color.black_overlay));
setId(formations.get(index.getId());
行。添加视图(btnTag);
}
}
布局。添加视图(行)`

尝试使用TableLayout。每行将强制执行整个元素,以使用相同的wights匹配父行。您可以使用计数器编程控制每行的按钮数。循环计数器末尾添加按钮,然后添加新的表行

TableLayout tbl=new TableLayout(context);//create table
TableRow tr=new TableRow(context);//create table row
tr.addView(view);//add your button instead of the view
tbl.addView(tr);//add the row into the Table
在XML文件中

<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/keypad"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:stretchColumns="*">
<TableRow>
    <Button android:id="@+id/keypad_1" android:text="@string/_1"></Button>
    <Button android:id="@+id/keypad_2" android:text="@string/_2"></Button>
    <Button android:id="@+id/keypad_3" android:text="@string/_3"></Button>
</TableRow>
</TableLayout>

尝试使用TableLayout。每行将强制执行整个元素,以使用相同的wights匹配父行。您可以使用计数器编程控制每行的按钮数。循环计数器末尾添加按钮,然后添加新的表行

TableLayout tbl=new TableLayout(context);//create table
TableRow tr=new TableRow(context);//create table row
tr.addView(view);//add your button instead of the view
tbl.addView(tr);//add the row into the Table
在XML文件中

<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/keypad"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:stretchColumns="*">
<TableRow>
    <Button android:id="@+id/keypad_1" android:text="@string/_1"></Button>
    <Button android:id="@+id/keypad_2" android:text="@string/_2"></Button>
    <Button android:id="@+id/keypad_3" android:text="@string/_3"></Button>
</TableRow>
</TableLayout>


我会试一试。跳出框框思考可能会有所帮助。我正在做类似的事情,创建一个Numpad作为布局对话框。我必须将每三个数字放在一起作为一行。TableLayout是@User1203811不太有效的解决方案。TableLayout生成完全相同的面向左上角的表格按钮,这绝不会像我希望的那样填满屏幕。与以前的解决方案唯一的区别是,现在它根本不会对包装内容或匹配父项做出反应。无论发生什么情况,它都会生成相同的输出。从XML文件生成TableLAyout,然后获取对它的引用并按上面所述进行修改。我将编辑我的答案以解释用于Table@user1203811再次检查我的答案。请确保将这句话放在XML:android:stretchColumns=“*”中我会试一试。跳出框框思考可能会有所帮助。我正在做类似的事情,创建一个Numpad作为布局对话框。我必须将每三个数字放在一起作为一行。TableLayout是@User1203811不太有效的解决方案。TableLayout生成完全相同的左上角方向的butt表ons,它决不会像我希望的那样填满屏幕。与以前的解决方案唯一的区别是,现在它根本不会对包装内容或匹配父项做出反应。无论发生什么情况,它都会生成相同的输出。从XML文件生成TableLAyout,然后获取对它的引用并按上面所述进行修改。我将编辑我的答案以解释XML代码e代表Table@user1203811再次检查我的答案。请确保将这句话放在XML:android:stretchColumns=“*”中