如何调整TableLayout行中包含的View的高度

时间:2012-05-29 14:29:33

标签: java android view tablelayout tablerow

这是我在Activity中得到的:

http://img855.imageshack.us/img855/2056/androidscreenshot.jpg

活动由TableLayout填充。 TableLayout反过来由2 TableRow填充,其中两个View包含100x100青色位图。黄色区域是TableView位置(1,1)中活动的背景。红色区域是位置(1,2)中活动的背景。

问题是我无法在位置(2,1)和(2,2)中看到另外两个青色位图。我认为问题是第一行中的视图在宽度中调整大小而在高度中没有调整大小。因此第一行中的视图模糊了第二行中的视图。

如果我添加View ViewGroup.LayoutParamsLayoutParams WRAP_CONTENT,我会java.lang.ArithmeticException: divide by zero

这是我的代码:

public class HIDActivity extends Activity
{

    boolean toggle = false;            
    TableLayout IFaceLayout;
    TableRow TButtons1;
    TableRow TButtons2;
    TableRow TArea;
    SimpleButton TButton1;
    SimpleButton TButton2;
    SimpleButton TButton3;
    SimpleButton TButton4;


    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);


        TButton1 = new SimpleButton(this);
        TButton2 = new SimpleButton(this);
        TButton3 = new SimpleButton(this);
        TButton4 = new SimpleButton(this);

        TButtons1 = new TableRow(this);
        TButtons2= new TableRow(this);

        TButtons1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );
        TButtons2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );

        TButtons1.addView(TButton1);                
        TButtons1.addView(TButton2);
        TButtons2.addView(TButton3);
        TButtons2.addView(TButton4);

        IFaceLayout = new TableLayout(this);
        IFaceLayout.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );
        IFaceLayout.setStretchAllColumns(true);

        IFaceLayout.addView(TButtons1);
        IFaceLayout.addView(TButtons2);

        setContentView(IFaceLayout);
        IFaceLayout.requestLayout();
    }


    class SimpleButton extends View
    {
        BitmapDrawable ButtonImage;
        Paint Style;
        int i , j ;
        int width , heigth;

        public SimpleButton(Context context) 
        {
            super(context);
            Style = new Paint();

            if(toggle == false) 
            {    
                this.setBackgroundColor(Color.YELLOW);
                toggle = true;
            }    
            else 
            {    
                this.setBackgroundColor(Color.RED);
                toggle = false;
            }
        }

        @Override
        public void onDraw(Canvas canvas)
        {       
            ButtonImage = new BitmapDrawable(Bitmap.createBitmap(100 , 100 , Bitmap.Config.RGB_565)); 
            this.width = ButtonImage.getBitmap().getWidth();
            this.heigth = ButtonImage.getBitmap().getHeight();

            for(i = 0 ; i < width ; i++)
            {                
                for(j = 0 ; j < heigth ; j++)
                {
                    ButtonImage.getBitmap().setPixel(i, j, Color.CYAN);
                }
            }

            canvas.drawBitmap(ButtonImage.getBitmap() , 0 , 0 , Style);        
        }        
    }
}

有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

问题似乎是扩展View的SimpleButton没有被垂直设置为wrap_content。

设置布局参数时,您希望使用对象所在的容器。当您定义布局参数时,您实际上是在说“这是我的对象/视图将如何填充它所容纳的容器的空间”。在这种情况下,您的按钮将位于表格行中,因此您应该相对于表格行定义布局参数,如下所示:

TButton1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );

TButton2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );

TButton3. [same thing]
TButton4. [same thing]

您可能需要将TButtons布局参数更改为相对于TableLayout,因为TableRow位于表格布局中。

TButtons1.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );            
TButtons2.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) ); 

您的表格布局也位于父级布局中。我不确定它是什么,但它将是你的xml文件的根源(可能),它很可能是相对或线性布局。您应该根据它所处的父布局来定义Table布局参数。

IFaceLayout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT , LayoutParams.WRAP_CONTENT ) );    

答案 1 :(得分:0)

Gophermofur 的暗示我部分纠正了。

调用MyView.setLayoutParams并将其传递给与包含MyView的对象类型匹配的Layout对象是正确的。但是,为了允许容器控制所包含对象的大小,我必须使用MATCH_PARENT而不是WRAP_CONTENT。

此外,我已经部分解决了手动将高度设置为100.即:

TButton1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT , 100); 

现在我得到4平方:

http://img152.imageshack.us/img152/1530/androidscreenshot3.jpg