Android TableLayout - 如何动态确定每行的单元格?

时间:2015-03-20 21:41:05

标签: android android-tablelayout

我需要创建一个TableLayout视图,它可以根据屏幕大小动态添加列。

例如,如果我在手机上,我每行可以添加的最大单元格数为5.但是,如果我在平板电脑上,我每行可以添加的最大单元格数为10。

5 10 值只是 magic 数字。

理想情况下,我会查询设备以确定屏幕大小,并根据大小调整列数。

这是我创建TableLayout的代码(它工作正常):

 TableLayout tableLayout = new TableLayout(mContext);
    tableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
            TableLayout.LayoutParams.WRAP_CONTENT));

    TableRow row = new TableRow(mContext);
    row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,
            TableRow.LayoutParams.WRAP_CONTENT));

    String[] separated = scheduleTimes.split(",");
    for (int s = 0; s < separated.length; s++) {

        // Five per row
        if ((s % itemsPerRow) == 0) {
            tableLayout.addView(row);

            row = new TableRow(mContext);
            row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,
                    TableRow.LayoutParams.WRAP_CONTENT));
        }

        TextView tv = new TextView(mContext);
        tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
                TableRow.LayoutParams.WRAP_CONTENT));
        tv.setPadding(5, 5, 5, 5);
        tv.setGravity(Gravity.RIGHT);
        tv.setTypeface(TypefaceSingleton.getRobotoRegular());
        tv.setTextSize(16);
        tv.setText(separated[s].trim());

        row.addView(tv);
    }

    tableLayout.addView(row);

关于如何确定每行可以添加的单元格数量的任何想法(即设置itemsPerRow)?

1 个答案:

答案 0 :(得分:0)

以dp获取显示宽度,然后确定每个单元格需要多少dps。我认为你已经完成了艰苦的工作。

 DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
 float dpWidth = displayMetrics.widthPixels / displayMetrics.density;

 itemsPerRow = dpWidth / cellWidthDp;