【问题标题】:How to add rows with buttons dynamically into table layout to have equal width如何将带有按钮的行动态添加到表格布局中以具有相等的宽度
【发布时间】:2015-07-02 05:38:28
【问题描述】:

我想在表格布局中动态添加一些宽度相等的按钮。我已经尝试过 StackOverflow 的所有方法,但找不到合适的解决方案。

这是我最初的 XML 布局:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@color/puzzle_background"
    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:layout_width="match_parent"
    android:layout_gravity="center">
    <TextView
        android:text="@string/levels_label"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dip"
        android:layout_marginBottom="10dip"
        android:textSize="28sp" />
    <TableLayout
        android:id="@+id/displayLevels"
        android:background="@color/puzzle_background"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="vertical" >

    </TableLayout>
</LinearLayout>

这是我的代码部分:

int i = 0;
int j = 0;
while (i<levelNum) {
    j = i + 4;
    row = new TableRow(this);
    TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
    row.setLayoutParams(lp);
    row.setWeightSum(4);
    while ((i<j)&&(i<levelNum)) {
        Button iBtn = new Button(this);
        iBtn.setGravity(Gravity.CENTER_HORIZONTAL);
        iBtn.setText(Integer.toString(i + 1));
        iBtn.setId(i + 1);
        iBtn.setOnClickListener(btnclick);
        row.addView(iBtn, 4 + i - j);
        i++;
    }
    lTable.addView(row);
}

但每次我在行中获得 4 个按钮时,它们并不真正适合该行。行中的右键总是在屏幕之外。

我做错了什么?请指教。

此致,亚历克斯

【问题讨论】:

    标签: android layout android-studio tablelayout


    【解决方案1】:

    我会建议你另一种方式,你可以通过代码获取屏幕宽度:

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int width1 = displaymetrics.widthPixels;
    

    然后按此设置按钮的下一个宽度:

    iBtn.getLayoutParams().width = width1;
    

    或者您也可以通过类似的功能设置按钮的最大宽度。 我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      经过一番尝试,我有了解决方案:

      首先,你的逻辑有问题,two while loops 等于one while loop。这让我很困惑。

      第二,android中的Buttondefault minimunWidth,所以如果你setWidthbutton小于default value,就会用default value设置宽度。

      第三,我用gravity.CENTER就是把所有的按钮都放在CENTER里。

      好的,这就是我的解释。以下是我的代码:

      TableLayout displayLevels = (TableLayout)findViewById(R.id.displayLevels);
      final int screenWidth = dpToPx(getResources().getConfiguration().screenWidthDp);
      int i = 0;
      int j = 0;
      int levelNum = 8;
      TableRow row = new TableRow(this);
      TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
      row.setLayoutParams(lp);
      row.setGravity(Gravity.CENTER);
      int width = (screenWidth - (levelNum)*4)/levelNum;//4: I don't remember name of it. It is default value.4dp or 4px... I don't remember exactly
      
      displayLevels.addView(row);
      while (i<levelNum) {
          Button iBtn = new Button(this);
          iBtn.setGravity(Gravity.CENTER_HORIZONTAL);
          iBtn.setMinimumWidth(100);//I set 100px for minimunWidth.
          iBtn.setWidth(width);
          iBtn.setText(Integer.toString(i + 1));
          iBtn.setId(i + 1);
          //iBtn.setOnClickListener(btnclick);
          row.addView(iBtn, i);
          i++;
      }
      

      与:

      private int dpToPx(int dp) {
          return (int) (dp * getResources().getDisplayMetrics().density + 0.5f);
      }
      

      【讨论】:

      • 感谢您的回复!我刚刚测试过它并且它有效!我已经将您的代码与我的代码进行了比较,所以问题出在 setMinimumWidth 的问题上,没有它就无法正确显示。
      猜你喜欢
      • 2022-01-07
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2012-03-10
      相关资源
      最近更新 更多