2013-10-10 40 views
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> 

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

回答

3

为什么要使用weight属性来隐藏按钮? layout_weight用于按比例分配空间(根据给定的权重)。我猜你可能通过将layout_weight设置为0(而另一个上的权重大于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> 
+0

注意,如果你有一个理由(即使它很疯狂:P)想要使用体重,我真的很好奇。 – ataulm

+0

我想要使用重量,因为在线性布局中,对象的权重为0,另一个权重为1,则1将填充线性布局,0根本不会显示。我对android很陌生,这只是一种似乎对我有用的方法。 – TiberiumFusion

+0

@TiberiumFusion公平,非常合理,我赞扬你的想法有一个不错的想法,尽管将来如果你在问题中解释了这个推理,它会对你(和你的回答者)有所帮助;它表明你已经考虑过这个问题,并且还会帮助其他人看看这个约束是不是必需的(就像这里的情况一样)。欢迎来到这里:) – ataulm

相关问题