0

抱歉,如果问题信息不足。我正在为 ICS 编写应用程序。我决定使用 TableLayout 来创建一个网格,供用户单击其中的内容。对于每一行,我放入几个 TextView 和一个 ImageView,它们之间的每两个之间都有一个 1dp 垂直边框,所有这些都以编程方式在一个循环中完成。现在我让每个 TextView 都可以点击。当它被点击时,它的背景会变成一个蓝色的drawable。但是,我观察到可绘制对象并没有水平填充整个“网格”。我认为 ImageView 占用的空间可能比它应该占用的空间多(1dp)。我想出了或找到了许多方法来拉伸 TextViews,但都没有为我工作。有任何想法吗?提前致谢!
编辑:这是我正在使用的循环 - 我知道它有点复杂,所以我没有发布它:

for(int i=0; i<5; i++){
        tr = new TableRow(ctxt);
        tr.setGravity(Gravity.CENTER);
        for(int j=0; j<6; j++){ //add the text from an array
            tv = new TextView(ctxt);
            tv.setText(a[6*i+j]:null);
            tv.setTextSize(16);
            tv.setPadding(0, 4, 0, 4);
            tv.setGravity(Gravity.CENTER);
            tv.setClickable(true);
            tv.setBackgroundResource(R.drawable.list_selector_background);
            tv.setTag(39+6*i+j);
            tv.setOnClickListener(this);
            tr.addView(tv, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 2.0f));
            if(j<5){ //set the border
                border = new ImageView(ctxt);
                border.setImageResource(R.drawable.vert_border);
                tr.addView(border, new LayoutParams(0, LayoutParams.MATCH_PARENT, 0.0f));
            }
        }
        tl2.addView(tr, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, 48));
        if(i<4){ //horizontal border
            tr = new TableRow(ctxt);
            tr.setMinimumHeight(1);
            tr.setBackgroundColor(color.bg_gray);
            tl2.addView(tr);
        }
    }
4

2 回答 2

0
Use android:layout_weight attribute to allocate the space occupied by a view. You have to assign android:weigh_sum to the container[In your case it is Table Row]

<TableRow
    <----------
    <----------
    android:weigh_sum="1">
    <ImageView
    <----------
    <----------
    android:Layout_weight=".2" // occupies 20%of the TableRow container   

I hope this helps.   
于 2012-06-01T04:22:09.220 回答
0

嗯......这个解决方案的灵感来自 Alfi,但主要是我自己发现的。
我使用 LayoutInflater 创建 TableRow 而不是构建它。

tr = (TableRow) li.inflate(R.layout.tbrow, null, false);

tbrow.xml 在哪里

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="293" >
</TableRow>

因为不能在程序中设置重量总和。这里的 293 等于我的 TextViews 和我的 ImageView 边框的总宽度。(48*6+1*5) 然后在程序中我可以准确地设置我想要的宽度。按照 Alfi 的指示,我将宽度设置为零,然后将重量设置为我想要的宽度。

tr.addView(tv, new LayoutParams(0, LayoutParams.MATCH_PARENT, 48));

至于边界:

tr.addView(border, new LayoutParams(0, LayoutParams.MATCH_PARENT, 1));

希望这对偶然发现此页面的其他人有所帮助。

于 2012-06-02T17:00:02.370 回答