我有一个由“设置”按钮激活的CountDownTimer,然后可以通过“取消”按钮停止。
活动开始时,我只想显示设置按钮。倒计时开始时,我想隐藏“设置”按钮并显示“取消”按钮。
我想通过改变按钮的重量来做到这一点。我该怎么做呢?我发现类似的问题有些答案在我尝试时无效。我认为这些答案只是完整代码的片段,这正是我正在寻找的。 p>
这是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>
我知道我使用的是硬编码字符串,它们仅用于开发目的。
答案 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>