Android对齐按钮取决于可见性

时间:2011-11-08 15:07:41

标签: android button

我在应用程序中设置对齐按钮时遇到了一些问题。我在一个布局中有4个不同的按钮,根据数据库中的某些值,我必须设置一个按钮的可见性。以下是我正在使用的xml代码示例:

 <RelativeLayout 
    android:id="@+id/coll_buttons"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_gravity="center"
    android:layout_marginBottom="10dp">


  <Button
        android:id="@+id/sync"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Synchronize"
        android:textSize="9dp"
        android:background="@drawable/ic_white_button"
        android:textColor="#333333"
        android:layout_margin="10dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:layout_alignParentLeft="true" />   

    <Button
        android:id="@+id/activate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activate"
        android:textSize="9dp"
        android:background="@drawable/ic_white_button"
        android:textColor="#333333"
        android:layout_margin="10dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:layout_alignParentLeft="true" />

    <Button 
        android:id="@+id/buy_stampii"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Buy Stampii"
        android:textSize="9dp"
        android:background="@drawable/ic_white_button"
        android:textColor="#333333"
        android:layout_marginTop="10dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:layout_toRightOf="@+id/activate"
        android:layout_marginLeft="5dp" />

    <Button
        android:id="@+id/deactivate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Deactivate"
        android:textSize="9dp"
        android:background="@drawable/ic_white_button"
        android:textColor="#333333"
        android:layout_marginTop="10dp"
        android:layout_marginRight="10dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:layout_alignParentRight="true" />

</RelativeLayout>

在第一种情况下,我必须将Button Activate的可见性设置为false,并将Button Sync的可见性设置为true。但是当我这样做时,我的Buy Stampii按钮覆盖了Sync Button,因为我正在设置Buy Stampii按钮toRightOf Activate Button。那么有什么方法可以为Buy Stampii按钮toRightOf属性设置两个不同的按钮,或者我该如何解决这个问题呢?

非常感谢!

3 个答案:

答案 0 :(得分:2)

NOp我认为你不能同时设置指向2个小部件的toRightOf属性。

是的,您可以执行一种解决方法。您可以将属性设置为INVISIBLE,而不是将视图置于可见性之外。在这种情况下,如果你说A在B的右边,如果A是可见的,它将正常工作。但问题是当A消失时,消失意味着B不知道放在哪里(在'没有'的右边因为A消失了)。诀窍是让A变得不可见。在这种情况下,你仍然可以说B是A的权利,而B将知道在哪里放置。

缺点是,当A不可见时,该地方仍将被占用,但您可以通过播放布局的大小轻松解决此问题。例如,当INVISIBLE你可以将宽度设置为1dip,当可见时你可以设置为wrap_content或者适合你的东西

这项工作我尝试过,但解决方案是UGLY,基本上你不应该像这样做。

答案 1 :(得分:0)

我认为解决方案是在设置按钮Visible / Invisible(Gone)时使用适当的规则更改RelativeLayout.LayoutParams。只需获取按钮的当前参数即可。addRule(RelativeLayout.ALIGN_RIGHT,<new anchor id>

答案 2 :(得分:0)

处理此问题的更好方法是分别为两种不同的布局(纵向和横向)分别设置两个不同的布局文件。

实际上有built in way to do this

我建议您阅读该文档,这是解决问题的一种非常简单的方法!

希望这有帮助。