Android 中 LayoutParams 的用法

一个控件应当使用它的父控件的 LayoutParams 类型。因此,一个 TableVow 应该使用 TableLayout.Params 。

所以,以一个 TableRow 为例:

        TableRow tableRow = new TableRow(context);
        tableRow.setLayoutParams(new TableLayout.LayoutParams(
            TableLayout.LayoutParams.MATCH_PARENT,
            TableLayout.LayoutParams.MATCH_PARENT,1.0f));

当我没有指明 LayoutParams 的类型时,TableRow 没有能够自动适应屏幕长度。因为 TableRow 不认识 TableLayout 的大小。所以此时即使设置了 weight 也不好使。

 

[android-developers] Re: Possible bug in TableLayout

Romain Guy Mon, 16 Feb 2009 19:57:16 -0800

Your code is *NOT* equivalent to the XML. You are using the wrong
LayoutParams everywhere. A widget must have the LayoutParams of its
*parent*. Therefore, the rows must have TableLayout.LayoutParams, the
TextViews must have TableRow.LayoutParams and the TableLayout must
have FrameLayout.LayoutParams.
Here is your code, corrected, and it works just fine.

package com.test;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class Test extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(buildTableViewFromSource());
        }

        private View buildTableViewFromSource() {
                FrameLayout.LayoutParams pTable = new FrameLayout.LayoutParams(
                                TableRow.LayoutParams.FILL_PARENT,
                                TableRow.LayoutParams.FILL_PARENT);

                TableLayout table = new TableLayout(this);
                table.setBackgroundColor(Color.RED);
                table.setLayoutParams(pTable);

                TableRow rowTop = new TableRow(this);

                TableLayout.LayoutParams pRowTop = new TableLayout.LayoutParams(
                                TableLayout.LayoutParams.FILL_PARENT,
                                TableLayout.LayoutParams.WRAP_CONTENT);
                pRowTop.weight = 1;

                rowTop.setBackgroundColor(Color.BLUE);

                TextView txt = new TextView(this);
                txt.setText("Top Content");

                rowTop.addView(txt, new TableRow.LayoutParams(
                                TableRow.LayoutParams.FILL_PARENT,
                                TableRow.LayoutParams.WRAP_CONTENT));

                TableRow rowBottom = new TableRow(this);
                rowBottom.setBackgroundColor(Color.GREEN);

                TextView txtBottom = new TextView(this);
                txtBottom.setText("Bottom Content");

                TableLayout.LayoutParams pRowBottom = new 
TableLayout.LayoutParams(
                                TableLayout.LayoutParams.WRAP_CONTENT,
                                TableLayout.LayoutParams.WRAP_CONTENT);

                rowBottom.addView(txtBottom, new TableRow.LayoutParams(
                                TableRow.LayoutParams.FILL_PARENT,
                                TableRow.LayoutParams.WRAP_CONTENT));

                table.addView(rowTop, pRowTop);
                table.addView(rowBottom, pRowBottom);

                return table;
        }
}

转载于:https://www.cnblogs.com/davesuen/p/3847817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值