【问题标题】:Android - How to set margins programmatically in gridlayoutAndroid - 如何在网格布局中以编程方式设置边距
【发布时间】:2016-02-24 09:24:35
【问题描述】:

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

按钮大小还可以,但边距似乎坏了。

package ray.gui;
import android.app.Activity;
import android.content.pm.*;
import android.graphics.*;
import android.os.Bundle;
import android.view.*;
import android.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);

【问题讨论】:

  • 你在说什么边距?单元格之间的内部边距或整个视图周围的外部边距?如果您分享您正在查看的内容和您希望看到的内容的屏幕截图,可能会有所帮助。
  • GridLayout: layoutParams.setMargins(size*30/100,size*30/100,size*30/100,size*30/100);
  • layoutParams.setMargins(size*30/100,size*30/100,size*30/100,size*30/100);
  • 我看到了代码,但不清楚您要达到什么目的,因此不清楚问题所在。您是要指定网格中单元格周围的边距,还是整个网格视图周围的边距?
  • 我想在行和列之间留一些额外的空间。

标签: java android android-layout user-interface android-gridlayout


【解决方案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;

【讨论】:

  • developer.android.com/reference/android/widget/… 上的文档说:与 GridLayout 的每个子级关联的类概览布局信息。
  • 是的,这意味着您应该在 GridLayout 的每个单元格上使用 GridLayout.LayoutParams,而不是在 GridLayout 本身上使用。你在 GridLayout 上使用什么样的 LayoutParams 取决于它的父视图是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多