gridLayout動的追加buttonボタン

8156 ワード

学習ノートはネット上の資料に基づいて整理して、ここで原作者に感謝します!
コードは次のとおりです.
public class CityActivity extends Activity {
  private GridLayout gridLayout;
  String[][] count = { { " ", " ", " ", " " }, { " ", " ", " ", " " }, { " ", " ", " ", " " } };
  gridLayout = (GridLayout) findViewById(R.id.hot_city_gridlayout);
  private void setHotCityGridLayout() {
    GridLayout.LayoutParams params = null;
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 4; j++) {
        final Button btn = new Button(this);
        btn.setTag(count[i][j]);
        btn.setWidth(40);
        btn.setBackgroundResource(R.drawable.btn_shape_login01);
        btn.setText(count[i][j]);
        btn.setPadding(20, 5, 5, 5);//  
        //  
        btn.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            Intent intent = new Intent(CityActivity.this, QueryActivity.class);
            intent.putExtra("cityname", btn.getTag().toString());
            setResult(100, intent);
            Log.i("TAG", "btnID:" + btn.getTag().toString());
            finish();
          }
        });
        GridLayout.Spec rowSpec = GridLayout.spec(i); //  btn 
        GridLayout.Spec columnSpec = GridLayout.spec(j);//  btn 
        params = new GridLayout.LayoutParams(rowSpec, columnSpec);
        params.width = 100; // btn 
        params.height = 60;// btn 
        params.setMargins(5, 0, 5, 5);// btn 
        params.setGravity(Gravity.LEFT);// btn ( )
        gridLayout.addView(btn, params);
      }
  }
}
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final LinearLayout layout = new LinearLayout(this);//  LinearLayout
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);
        final Button btn = new Button(this);
        btn.setText("Button1");
        layout.addView(btn);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                layout.removeView(btn);
                layout.addView(btn);
            }
        });
        setContentView(layout);
    }
}

サブコントロールの動的追加
for (int i = 0, j = list.size(); i < j; i++) {
    ......
    View functionView = new View(getContext());
    functionView.setBackgroundResource(iconResId);
    ......
    // Spec 
    GridLayout.Spec rowSpec = GridLayout.spec(i / 3, 1f);
    GridLayout.Spec columnSpec = GridLayout.spec(i % 3, 1f);
    // Spec GridLayout.LayoutParams 0, , 
    GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams(rowSpec, columnSpec);
    layoutParams.height = 0;
    layoutParams.width = 0;
    // , 
    // 2dp bottomMargin, 2dp leftMargin rightMargin
    if (i / 3 == 0)
        layoutParams.bottomMargin = getResources().getDimensionPixelSize(R.dimen.dp_2);
    if (i % 3 == 1) {
        layoutParams.leftMargin = getResources().getDimensionPixelSize(R.dimen.dp_2);
        layoutParams.rightMargin = getResources().getDimensionPixelSize(R.dimen.dp_2);
    }
    functionGrid.addView(functionView, layoutParams);
}