gpt4 book ai didi

android - 使用 android :layout_weight programmatically 填充 TableLayout

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:37 27 4
gpt4 key购买 nike

我正在尝试使用单元格和行来填充表格布局以填充整个屏幕。像这样:

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

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

<?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>

我正在尝试在代码中创建相同的外观,但到目前为止失败了。这是我的 Activity 的 oncreate:

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, LayoutParams.WRAP_CONTENT, Gravity.CENTER));

这段代码创建了 3 行,每行水平拉伸(stretch)但不是垂直拉伸(stretch):

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

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

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

请帮忙!

最佳答案

我花了一个半小时试图弄清楚发生了什么。然后我找到了 :) 这是我的 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 中的哪一个,你应该总是使用那个 View 的父级。

关于android - 使用 android :layout_weight programmatically 填充 TableLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com