如何以编程方式更改按钮的重量

时间:2013-10-10 22:04:24

标签: android android-layout

我有一个由“设置”按钮激活的CountDownTimer,然后可以通过“取消”按钮停止。

活动开始时,我只想显示设置按钮。倒计时开始时,我想隐藏“设置”按钮并显示“取消”按钮。

我想通过改变按钮的重量来做到这一点。我该怎么做呢?我发现类似的问题有些答案在我尝试时无效。我认为这些答案只是完整代码的片段,这正是我正在寻找的。

这是XML:

<LinearLayout
    android:id="@+id/buttonsContainer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true" >
        <Button
            android:id="@+id/setDelay"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:onClick="activateDelay"
            android:text="Set Delay" />
       <Button
            android:id="@+id/cancelDelay"
            android:layout_width="0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:onClick="cancelDelay"
            android:text="Cancel Delay" />
</LinearLayout>

我知道我使用的是硬编码字符串,它们仅用于开发目的。

1 个答案:

答案 0 :(得分:3)

为什么要使用weight属性隐藏按钮? layout_weight用于按比例共享空间(根据给定的权重)。我猜你可以“隐藏”按钮,方法是将layout_weight设置为0(另一方面的权重设置为大于0的值)。 在将视图添加到viewgroup之后,我从未更新布局参数,但parent.updateViewLayout(childView, updatedParams)看起来很有希望。

无论如何,在你想要的按钮上使用setVisibility(View.GONE);它是隐藏的,其余的视图布局就像按钮不存在一样。 (您可以使用View.INVISIBLE隐藏视图,但其余视图的布局就像按钮在那里一样 - 您根本看不到它。)

这是一个未经测试的“片段”; P

private Button set;
private Button cancel;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // it's typical to use underscore notation for IDs - R.id.set_delay
    set = (Button) findViewById(R.id.setDelay);
    cancel = (Button) findViewById(R.id.cancelDelay);
}

public void activateDelay(View button) {
    set.setVisibility(View.GONE);
    cancel.setVisibility(View.VISIBLE);
}

public void cancelDelay(View button) {
    set.setVisibility(View.VISIBLE);
    cancel.setVisibility(View.GONE);
}

在你的XML中,你会看到“设置”按钮可见(默认情况下),“取消”消失,宽度为match_parent

<LinearLayout
    android:id="@+id/buttonsContainer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true">

    <Button
        android:id="@+id/setDelay"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:onClick="activateDelay"
        android:text="Set Delay" />

    <Button
        android:id="@+id/cancelDelay"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:visibility="gone"
        android:onClick="cancelDelay"
        android:text="Cancel Delay" />
</LinearLayout>