对不起,如果问题不够充分。
我正在为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);
}
}
答案 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));
希望这可以帮助其他人偶然发现这个页面。