1

テーブル行を動的に作成し、新しい行に 2 つの TextView を追加しています。これで問題なく動作しますが、2 つの TextView の layout_weight がそれぞれ 1 になるように LayoutParams をフォーマットしようとしています。いくつかの LayoutParams を追加しようとしましたが、無視されているようです。行を作成するコードは次のとおりです。LayoutParams ビットをコメントアウトしました。アプリを実行しても変化はありません。これは、LayoutParams が無視されていることを示しています。私の行作成コードでこれを達成できるように、layout_weight を 2 つの TextViews に割り当てるのに助けが必要です

        <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_weight="1" />

行を作成するコードは次のとおりです。

        TableLayout tl = (TableLayout) findViewById(R.id.pres_table);

    for (int ctr = 0; ctr < pres_res.size(); ctr++)

    {
        final String pst_str = pres_res.get(ctr);
        final String yrs_str = yrs_res.get(ctr);

        TableRow tr = new TableRow(this);
        /*
        TableRow.LayoutParams trPara = new TableRow.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT,
                TableRow.LayoutParams.WRAP_CONTENT);
        int leftMargin = 10;
        int topMargin = 2;
        int rightMargin = 10;
        int bottomMargin = 2;
        trPara.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        tr.setLayoutParams(trPara);

         */
        TextView tv1 = new TextView(this);
        tv1.setText(pst_str);
        tv1.setTextColor(Color.BLACK);
        tv1.setTextSize(18);

        TextView tv2 = new TextView(this);
        tv2.setText(yrs_str);
        tv2.setTextColor(Color.BLACK);
        tv2.setTextSize(18);

        tr.addView(tv1);
        tr.addView(tv2);
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

テーブルを作成するための XML は、次のような基本的なものです。

            <TableLayout
            android:id="@+id/pres_table"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FFFFFF" >
        </TableLayout>

ありがとう!

4

2 に答える 2

2
// try this way
        TextView tv1 = new TextView(this);
        tv1.setLayoutParams(new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));
        tv1.setText(pst_str);
        tv1.setTextColor(Color.BLACK);
        tv1.setTextSize(18);

        TextView tv2 = new TextView(this);
        tv2.setLayoutParams(new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));
        tv2.setText(yrs_str);
        tv2.setTextColor(Color.BLACK);
        tv2.setTextSize(18);

        tr.addView(tv1);
        tr.addView(tv2);
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT));
于 2013-10-03T04:46:04.157 に答える
0

まず、Geobits が正しいパスに設定し、間違った場所で LayoutParams 呼び出しを行ったことを知らせてくれたことに感謝します。テーブル行ではなく、TextView に適用する必要があります。次に、それに基づいて、StackOverflow の投稿を見つけました: Set the layout weight of a TextView programmaticallyで、2 番目の答えが解決策でした。だから今、私のコードは次のようになり、私が望むように動作します:

        TableLayout tl = (TableLayout) findViewById(R.id.pres_table);

    for (int ctr = 0; ctr < pres_res.size(); ctr++)

    {
        final String pst_str = pres_res.get(ctr);
        final String yrs_str = yrs_res.get(ctr);

        TableRow tr = new TableRow(this);
        /*
        TableRow.LayoutParams trPara = new TableRow.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT,
                TableRow.LayoutParams.WRAP_CONTENT);
        int leftMargin = 10;
        int topMargin = 2;
        int rightMargin = 10;
        int bottomMargin = 2;
        trPara.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        tr.setLayoutParams(trPara);
        tr.setLayoutParams(new LayoutParams(
        LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));

         */
        LayoutParams tvPar = new TableRow.LayoutParams(0,LayoutParams.WRAP_CONTENT, 1f);
        TextView tv1 = new TextView(this);
        tv1.setLayoutParams(tvPar);
        tv1.setText(pst_str);
        tv1.setTextColor(Color.BLACK);
        tv1.setTextSize(18);

        TextView tv2 = new TextView(this);
        tv2.setLayoutParams(tvPar);
        tv2.setText(yrs_str);
        tv2.setTextColor(Color.BLACK);
        tv2.setTextSize(18);

        tr.addView(tv1);
        tr.addView(tv2);
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

コメントアウトされたビットのすぐ下に、新しいLayoutParams tvParコードを示すソリューションがあります。

于 2013-10-02T14:55:42.157 に答える