我试图在运行时使用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);
}
}
答案 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:
所有视图都应该有布局参数。这些供应参数指向此视图的父级,指定应如何排列。