2014-05-24 2 views
2

런타임에 gridLayout을 사용하여 버튼 눈금을 표시하려고합니다. 전 화면의 너비에 맞게 gridLayout에 맞게 노력하고 있습니다. 나는 3x3 및 5x5 버튼 그리드 (내 넥서스 4 사용)를 할 수 있습니다. 그러나 7x7로 이동하면 마지막 열, 즉 GridLayout의 마지막 열을 잃게됩니다. 나는 진지하게 위선적 인 말을 이해하지 못한다.안드로이드에서 GridLayout에 열이 표시되지 않습니다.

다음은 내가하고있는 일 ... 설정 활동에서 격자 크기를 가져오고 GridLayout (numColumns)의 열 수입니다. LayoutParams를 사용하여 너비와 높이를 가져오고 버튼의 너비와 높이를 (layoutWidth/numColumns) 및 (layoutHeight/numColumns)로 설정합니다. 제발 나를 도와주세요 guyz .. 아래 코드를 붙여 넣었습니다. 당신은 그것을가 추가 된 후에 만 ​​버튼의 매개 변수를 설정해야합니다

+0

너비 계산에서 기본적으로 안드로이드가 추가 한 패딩/간격을 고려하지 않았습니다. http://stackoverflow.com/questions/21455495/gridlayoutnot-gridview-space-between-the-cells를 참조하십시오. 나는 그것을 시도했지만 나를 위해 일하지 않았다. – faizal

+0

안녕하세요 @faizal .. 안녕하세요 @faizal .. 답장을 보내 주셔서 감사합니다. 그것은 나에게도 그 일을 너무 많이 .. 아직도 동일을 게재 – user3371005

+0

for 루프 내부에, addView 라인 다음에 끝에 다음 줄을 추가하십시오 : ViewGroup.LayoutParams par = button.getLayoutParams(); par.width = width/numColumns; par.height = width/numColumns; button.setLayoutParams (par); – faizal

답변

0

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); 



} 

}은 부모 레이아웃입니다.

그래서 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 :

모든 뷰가 있어야한다 레이아웃 매개 변수. 이 뷰의 부모에게 매개 변수를 제공하여 배열 방법을 지정합니다.

+0

감사합니다 .. 그것은 일했습니다 .. – user3371005

관련 문제