有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android如何在gridlayout中以编程方式设置边距

尝试在网格布局中获得几行按钮

按钮大小合适,但边距似乎断裂了

package ray.gui;
import 安卓.app.Activity;
import 安卓.content.pm.*;
import 安卓.graphics.*;
import 安卓.os.Bundle;
import 安卓.view.*;
import 安卓.widget.*;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        int size=150;
        int rows=2;
        int columns=5;
        Integer[] colors=new Integer[columns];
        colors[0]=Color.RED;
        colors[1]=Color.YELLOW;
        colors[2]=Color.GREEN;
        colors[3]=Color.BLUE;
        colors[4]=Color.rgb(255,165,0);
        GridLayout gridLayout=new GridLayout(this);
        gridLayout.setRowCount(rows);
        gridLayout.setColumnCount(columns);
        GridLayout.LayoutParams layoutParams=new GridLayout.LayoutParams();
        layoutParams.setMargins(size*30/100,size*30/100,size*30/100,size*30/100);
        gridLayout.setLayoutParams(layoutParams);
        for(int i=0;i<rows*columns;i++) {
            Button button=new Button(this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(size,size);
            params.width = size;
            params.height= size;
            button.setLayoutParams(params);
            button.setText(""+i);
            //button.setLayoutParams(layoutParams);
            if(i/columns%2==1)
                button.setBackgroundColor(colors[i%columns]);
            gridLayout.addView(button);
        }
        setContentView(gridLayout);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return false;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }
}

编辑:下面的代码有效

    Button button=new Button(this);
    GridLayout.LayoutParams layoutParams=new GridLayout.LayoutParams();
    layoutParams.setMargins(size*20/100,size*20/100,size*20/100,size*20/100);
    layoutParams.width=size;
    layoutParams.height=size;
    button.setLayoutParams(layoutParams);

共 (1) 个答案

  1. # 1 楼答案

    视图的layoutParams供其父视图使用,而不是供其本身使用。所以gridLayout的layoutParams不应该是gridLayout。LayoutParams,因为其父级不是GridLayout

    试着替换

        GridLayout.LayoutParams layoutParams=new GridLayout.LayoutParams();
        layoutParams.setMargins(size*30/100,size*30/100,size*30/100,size*30/100);
    

        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout
                .LayoutParams.WRAP_CONTENT);
        layoutParams.leftMargin = 45;
        layoutParams.rightMargin = 45;
        layoutParams.topMargin = 45;
        layoutParams.bottomMargin = 45;