在Android中的GridLayout中未显示列

时间:2014-05-24 08:11:22

标签: android android-gridlayout

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

这是我正在做的事情。我从设置活动中获取网格大小,这是GridLayout(numColumns)中的列数。我使用LayoutParams并获得宽度和高度并设置按钮'宽度和高度(layoutWidth / numColumns)和(layoutHeight / 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);



}

}

1 个答案:

答案 0 :(得分:0)

只有在将按钮的参数添加到父布局后,才应设置该按钮的参数。

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

ViewGroup.LayoutParams par = button.getLayoutParams(); 
par.width=width/numColumns; 
par.height=width/numColumns; 
button.setLayoutParams(par);

http://developer.android.com/reference/android/view/View.html#getLayoutParams%28%29

所有视图都应该有布局参数。这些供应参数指向此视图的父级,指定应如何排列。