Android中的GridLayout中未显示列

Android中的GridLayout中未显示列,android,android-gridlayout,Android,Android Gridlayout,我试图在运行时使用gridLayout显示按钮网格。我试图使网格布局适合整个屏幕的宽度。我能够为3x3和5x5按钮网格做到这一点(使用我的nexus 4)。但当我选择7x7时,我丢失了最后一列按钮,即GridLayout的最后一列。我真的不明白这里出了什么问题 这是我正在做的。。我从“设置”活动中获取网格大小,这是GridLayout中的列数(numColumns)。我使用LayoutParams获取宽度和高度,并将按钮的宽度和高度设置为(layoutWidth/numColumns)和(lay

我试图在运行时使用gridLayout显示按钮网格。我试图使网格布局适合整个屏幕的宽度。我能够为3x3和5x5按钮网格做到这一点(使用我的nexus 4)。但当我选择7x7时,我丢失了最后一列按钮,即GridLayout的最后一列。我真的不明白这里出了什么问题

这是我正在做的。。我从“设置”活动中获取网格大小,这是GridLayout中的列数(numColumns)。我使用LayoutParams获取宽度和高度,并将按钮的宽度和高度设置为(layoutWidth/numColumns)和(layouthweight/numColumns)。请帮帮我,伙计。。我已将代码粘贴到下面

public class StartGameActivity extends ActionBarActivity {

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_game);




    SharedPreferences sharedPref= PreferenceManager.getDefaultSharedPreferences(this);
    int numColumns=Integer.parseInt(sharedPref.getString("Grid", "3").toString());
    // create a RelativeLayout
    RelativeLayout relativeLayout = new RelativeLayout(this);
    //LinearLayout linearLayout = new LinearLayout(this);

    // define the RelativeLayout layout parameters.
    //LinearLayout.LayoutParams linearLayoutparams=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
    DisplayMetrics metrics=new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int width=metrics.widthPixels;
    int height=metrics.heightPixels;
    RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(width,height);
    RelativeLayout.LayoutParams relativeLayoutParams1 = new RelativeLayout.LayoutParams(width,height);


    GridLayout gridLayout=new GridLayout(this);
    GridLayout.LayoutParams gridLayoutParams = new GridLayout.LayoutParams();   
    gridLayoutParams.setGravity(Gravity.FILL_HORIZONTAL);


    gridLayout.setColumnCount(numColumns);
    gridLayout.setRowCount(numColumns);
    gridLayout.setMinimumHeight(height);
    gridLayout.setMinimumWidth(width);

    for(int i=0;i<numColumns*numColumns;i++)
    {


        Button button=new Button(this);
        button.setWidth(width/numColumns);
        button.setHeight(width/numColumns);
        button.setMinWidth(width/numColumns);
        button.setMinHeight(width/numColumns);
        button.setGravity(Gravity.FILL);
        //buttonForEveryRow++;
        //columIndex++;
        gridLayout.addView(button);
    }


    relativeLayout.addView(gridLayout,relativeLayoutParams1);
    setContentView(relativeLayout,relativeLayoutParams);



}
公共类StartGameActivity扩展了ActionBarActivity{
@TargetApi(构建版本代码冰淇淋三明治)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u start\u game);
SharedPreferences sharedPref=PreferenceManager.getDefaultSharedPreferences(此);
int numColumns=Integer.parseInt(sharedPref.getString(“Grid”,“3”).toString());
//创建一个RelativeLayout
RelativeLayout RelativeLayout=新的RelativeLayout(本);
//LinearLayout LinearLayout=新的LinearLayout(本);
//定义RelativeLayout布局参数。
//LinearLayout.LayoutParams linearLayoutparams=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_父项,LinearLayout.LayoutParams.MATCH_父项);
DisplayMetrics=新的DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(度量);
int width=metrics.widthPixels;
int height=metrics.heightPixels;
RelativeLayout.LayoutParams relativeLayoutParams=新的RelativeLayout.LayoutParams(宽度、高度);
RelativeLayout.LayoutParams RelativeLayoutParams 1=新的RelativeLayout.LayoutParams(宽度、高度);
GridLayout GridLayout=新的GridLayout(此);
GridLayout.LayoutParams gridLayoutParams=新建GridLayout.LayoutParams();
gridLayoutParams.setGravity(重力水平填充);
setColumnCount(numColumns);
setRowCount(numColumns);
网格布局。设置最小高度(高度);
gridLayout.setMinimumWidth(宽度);

对于(int i=0;i,只有在将按钮添加到其父布局后,才应设置按钮的参数

因此,在FOR循环中,删除所有
按钮。设置..
行,并在末尾添加以下行(在gridLayout.addView行之后):

:


所有视图都应该有布局参数。这些参数提供给此视图的父视图,指定其布局方式。

在宽度计算中,您没有考虑Android默认添加的填充/间距。请参阅。我尝试过,但对我无效。Hey@faizal..谢谢您的回复..它对我也不起作用..它对我无效仍然显示您的for循环中的SAMEE,在结尾(添加视图行之后)添加以下行:VisualGyth.LayOutPARAMPAR=按钮.GETLayOutPARAMSH();PAR宽度=宽度/NUMPLAL;PAR.Health=宽度/NUBSULTS;Buto.StayLayOutPARAMS(PAR);
ViewGroup.LayoutParams par = button.getLayoutParams(); 
par.width=width/numColumns; 
par.height=width/numColumns; 
button.setLayoutParams(par);