以编程方式使用android:layout_weight填充TableLayout

以编程方式使用android:layout_weight填充TableLayout,第1张

概述我试图填充一个tablelayout与单元格和行拉伸填充整个屏幕.像这样: http://imageshack.us/photo/my-images/69/device20120201005942.png/ 在Eclipse的Graphical Layout窗口中设计的这个布局给出了我想要的东西(android:layout_weight解决了垂直拉伸): <?xml version="1.0" 我试图填充一个tablelayout与单元格和行拉伸填充整个屏幕.像这样:

http://imageshack.us/photo/my-images/69/device20120201005942.png/

在Eclipse的Graphical Layout窗口中设计的这个布局给出了我想要的东西(androID:layout_weight解决了垂直拉伸):

<?xml version="1.0" enCoding="utf-8"?><tableLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="fill_parent"    androID:layout_height="fill_parent"    androID:layout_gravity="center"    androID:stretchColumns="*" >    <tableRow        androID:ID="@+ID/tableRow1"        androID:layout_wIDth="fill_parent"        androID:layout_height="wrap_content"        androID:layout_gravity="center" androID:layout_weight="1">        <ImageVIEw            androID:ID="@+ID/imageVIEw1"            androID:layout_gravity="center"            androID:src="@drawable/add" />        <ImageVIEw            androID:ID="@+ID/imageVIEw2"            androID:layout_gravity="center"            androID:src="@drawable/bound" />        <ImageVIEw            androID:ID="@+ID/imageVIEw3"            androID:layout_gravity="center"            androID:src="@drawable/cod" />    </tableRow>    <tableRow        androID:ID="@+ID/tableRow2"        androID:layout_wIDth="fill_parent"        androID:layout_height="wrap_content"        androID:layout_gravity="center"        androID:layout_weight="1" >    <ImageVIEw        androID:ID="@+ID/imageVIEw4"        androID:layout_gravity="center"        androID:src="@drawable/delete" />    <ImageVIEw        androID:ID="@+ID/imageVIEw5"        androID:layout_gravity="center"        androID:src="@drawable/delete2" />    <ImageVIEw        androID:ID="@+ID/imageVIEw6"        androID:layout_gravity="center"        androID:src="@drawable/floppy" />    </tableRow></tableLayout>

我试图在代码中创建相同的外观但到目前为止失败.这是我的活动的创建:

public voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.tablelo);    tableLayout tl = (tableLayout) findVIEwByID(R.ID.table);    Log.d(TAG,"WIDth :" + tl.getWIDth());    for (int row = 0; row < 3; row++) {        tableRow tr = new tableRow(this);        tr.setID(100 + row);        for (int cell = 0; cell < 3; celL++) {            ImageVIEw image = new ImageVIEw(this);            image.setimageResource(imageIDs[row * 3 + cell]);            tr.addVIEw(image);        }        tr.setGravity(Gravity.CENTER);        LayoutParams params = new tableRow.LayoutParams(                LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT,1);        tr.setLayoutParams(params);        tl.addVIEw(tr,params);    }    tl.setStretchAllColumns(true);}

我错过了设置ImageVIEw重力的代码,但这种尝试导致崩溃:

image.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,Gravity.CENTER));

此代码生成3行,每行都水平拉伸但不垂直拉伸:

http://imageshack.us/photo/my-images/835/gridc.png/

我找不到我在这里失踪的东西.我还尝试在设计器中准备一个tablerow并在运行时添加并添加到表中,但结果没有改变.

所以,不知何故,我希望以编程方式获得我可以使用编辑器创建的相同布局.

请帮忙!

解决方法 我花了一个半小时试图弄清楚发生了什么.然后我发现它:)这是我的tableActivity的完整列表,请注意表格行和图像的不同LayoutParams的使用:

import androID.app.Activity;import androID.os.Bundle;import androID.util.Log;import androID.vIEw.Gravity;import androID.Widget.*;import androID.Widget.tableLayout;import androID.Widget.tableRow;public class tableActivity extends Activity {    private static final String TAG="tableActivity";    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.table_activity);        tableLayout tl = (tableLayout) findVIEwByID(R.ID.table);        Log.d(TAG,"WIDth :" + tl.getWIDth());        for (int row = 0; row < 3; row++) {            tableRow tr = new tableRow(this);            tr.setID(100 + row);            //Note that you must use tableLayout.LayoutParams,//since the parent of this tableRow is a tableLayout            tableLayout.LayoutParams params = new tableLayout.LayoutParams(                    tableLayout.LayoutParams.WRAP_CONTENT,tableLayout.LayoutParams.WRAP_CONTENT,1f);            for (int cell = 0; cell < 3; celL++) {                ImageVIEw image = new ImageVIEw(this);                image.setimageResource(androID.R.drawable.btn_plus);                //Note that here you must use tableRow.LayoutParams                //since tableRow is the parent of this ImageVIEw                tableRow.LayoutParams imageParams = new tableRow.LayoutParams();                //And this is how you set the gravity:                imageParams.gravity = Gravity.CENTER;                image.setLayoutParams(imageParams);                tr.addVIEw(image);            }            tr.setLayoutParams(params);            tl.addVIEw(tr,params);        }        tl.setStretchAllColumns(true);    }}

table_activity.xml只是一个空表布局:

<?xml version="1.0" enCoding="utf-8"?><tableLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"         androID:ID="@+ID/table"          androID:layout_wIDth="match_parent"          androID:layout_height="match_parent"></tableLayout>

简而言之,最简单的解决方案是使用xml文件中定义的布局:)但是如果你必须使用JAVA,你必须小心你正在使用的LayoutParams之王,你应该总是使用一个视图的家长.

总结

以上是内存溢出为你收集整理的以编程方式使用android:layout_weight填充TableLayout全部内容,希望文章能够帮你解决以编程方式使用android:layout_weight填充TableLayout所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1128952.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存