1

我有 TableLayout 如下:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:stretchColumns="1">

<TableRow>
  <Button
     android:id="@+id/b1"
     android:layout_width="0dip"
     android:layout_height="fill_parent"
     android:layout_weight="1"
     android:gravity="center" />
  <Button
     android:id="@+id/b2"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
     android:gravity="center" />
  <Button
     android:id="@+id/b3"
     android:layout_width="0dip"
     android:layout_height="fill_parent"
     android:layout_weight="1"
     android:gravity="center" />
 </TableRow>
</TableLayout>

每个 Button 具有相同的宽度。我希望这些按钮的高度与它们的宽度完全相同。我尝试通过以下方式以编程方式进行操作:

Button b1 = (Button) findViewById(R.id.b1);
b1.setHeight(b1.getWidth());

但它不起作用(它给了我 0 的值)。我想是因为当我这样做时(在 onCreate 方法中)按钮尚未设置。

4

1 回答 1

1

首先,您是对的,您得到的值为 0,因为当您尝试获取 button 时屏幕尚未绘制width

如我所见,按照您的意愿进行操作的唯一可能性是在 XML 文件中为它们提供预先定义的值。

例如:

  <Button
     android:id="@+id/b1"
     android:layout_width="25dip"
     android:layout_height="25dip"
     android:gravity="center" />

以编程方式设置宽度和高度:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

btnWidth = metrics.heightPixels/3 - 50;//gap
btnHeight = btnWidth;

Button b1 = (Button) findViewById(R.id.b1);
b1.setHeight(btnWidth);
b1.setWidth(btnWidth);
于 2012-09-28T16:58:56.137 回答