android - 在表格中设置textview的背景

时间:2012-05-25 16:43:17

标签: android layout textview tablelayout

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

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);
        }
    }

2 个答案:

答案 0 :(得分: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.   

答案 1 :(得分: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));

希望这可以帮助其他人偶然发现这个页面。