0

我有一个 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>

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

4

1 回答 1

3

为什么要使用 weight 属性来隐藏按钮?layout_weight用于按比例共享空间(根据给定的权重)。我想你可以通过将 设置为 0 来“隐藏”一个按钮(另一个按钮layout_weight的权重大于 0)。将视图添加到视图组,我从未更新过布局参数,但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>
于 2013-10-10T22:06:22.937 回答