0

質問が十分に有益でない場合は申し訳ありません。私はICS用のアプリをコーディングしています。TableLayout を使用して、ユーザーがクリックするグリッドを作成することにしました。行ごとに、いくつかの TextView と、それらの 2 つの間に 1 dp の垂直境界線の ImageView を配置し、すべてプログラムでループで実行しました。ここで、各 TextView をクリック可能にしました。クリックすると、背景が青色のドローアブルに変わります。ただし、ドローアブルが「グリッド」全体を水平方向に埋めていないことがわかります。ImageView はおそらく必要以上のスペース (1 dp) を占有していると思います。私は 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 の指示に従って、幅を 0 に設定し、ウェイトを希望の幅に設定しました。

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 に答える