Android 网格布局分隔线

Android GridLayout Dividers

为什么 Android 不包括在网格布局中为单元格添加边框的功能?我已经阅读了多个 post 的几种方法来做到这一点。下面是我尝试过但收效甚微的一种方法。我的问题是水平线分隔线。当使用适当的垂直和水平代码执行时,我的网格最终会被单元格挡住,因此文本在单元格中不可见。如果我删除水平代码,我会按预期在每一列获得完美的垂直线。关于什么是错误的任何想法。我能够使用相同的方法在 table 上创建网格线。网格布局位于水平滚动条内,水平滚动条位于垂直滚动条内。网格布局背景为黑色。所以我最终应该得到蓝色单元格和黑色分隔线。

 for (int y = 0; y < rownum; y++) {
 cols = 0;
 while (cols < columnum) {
  TextView textViewD = new TextView(this);
  textViewD.setTextSize(18);
  textViewD.setWidth(300);
  textViewD.setHeight(75);
  textViewD.setTextColor(Color.WHITE);
  textViewD.setBackgroundColor(Color.BLUE);
   textViewD.setText(title);
  //CREATE VERTICAL DIVIDER LINES
            View v = new View(this);
            v.setLayoutParams(new ViewGroup.LayoutParams(3, ViewGroup.LayoutParams.MATCH_PARENT));
            v.setBackgroundColor(Color.BLACK);
    cols++;
    gridLayoutE.addView(textViewD);

    }

    //CREATE HORIZONTAL DIVIDER LINES

               View v1 = new View(this);
        v1.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 3));
        v1.setBackgroundColor(Color.BLACK);
        gridLayoutE.addView(v1);

   }

编辑: 这是我在其他 post 上找到的关于设置 textView

的边距

LinearLayout.LayoutParams 参数 = (LinearLayout.LayoutParams)textViewD.getLayoutParams(); params.setMargins(2, 2, 2, 2); textViewD.setLayoutParams(参数);

我没有 LinearLayout,当我尝试这样做时,它崩溃了。

另一种获得您想要的 View 的简单技巧是:

因为你的 GridLayout 的背景已经是黑色的,把你的 TextView 放在另一个布局中让 LinearLayoutTextview 的布局设置为 setparams MATCH_PARENT 然后应用一些边距可以说 2 然后添加整个视图(LinearLayout 作为根)。这将使黑色出现,因为边距会使视图稍微调整一下,因此会显示某种边界,就像您在图像中显示的那样!使用这种方式将简化工作,因此您不需要创建分隔线,无论是水平还是垂直!

对于那些可能 运行 遇到类似情况的人,正如 Xenolion 所建议的,这就是我最终所做的。

for (int y = 0; y < rownum; y++) {
cols = 0;
while (cols < columnum) {
LinearLayout parent = new LinearLayout(this);
            parent.setBackgroundColor(Color.BLACK);
            parent.setOrientation(LinearLayout.HORIZONTAL);
            LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
 params.setMargins(2, 2, 2, 2);  //CREATES DIVIDER LINES
 TextView textViewD = new TextView(this);
 textViewD.setTextSize(18);
 textViewD.setWidth(300);
 textViewD.setHeight(75);
 textViewD.setTextColor(Color.WHITE);
 textViewD.setBackgroundColor(Color.BLUE);
 textViewD.setText(title);
 textViewD.setLayoutParams(params);
 parent.addView(textViewD);
 cols++;
 gridLayoutE.addView(parent);
}

}