一个按钮变为不可见后,布局的顺序会发生变化

时间:2016-07-26 11:35:01

标签: java android button layout

这是原始布局:http://prntscr.com/bxods5

它的XML:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1"

    >
    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:weightSum="10">

        <Button
            android:id="@+id/editBtn"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="0dp"
            android:layout_height="36dp"
            android:layout_column="2"
            android:layout_weight="2"
            android:onClick="editEvent"
            android:text="EDIT" />

        <TextView
            android:id="@+id/attendingEventInListviewRow"
            android:layout_width="0dp"
            android:layout_weight="6"
            android:layout_height="wrap_content"
            android:layout_column="38"
            android:height="30sp"
            android:tag="Events2goName"
            android:text="Events2go"
            android:textColor="#000000"
            android:textSize="22sp"
            android:textStyle="normal"
            android:layout_gravity="right"
            />

        <Button
            android:id="@+id/cancel_arrive"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="0dp"
            android:layout_weight="2"
            android:layout_height="36dp"
            android:layout_column="37"
            android:layout_gravity="right"
            android:onClick="selectCancelArrive"
            android:text="Nope" />
    </TableRow>   



</TableLayout>

问题是,并非所有用户都可以编辑,因此对于某些用户,“编辑”按钮会消失,如下所示:

if(resource==R.layout.attending_listview_row) {
        eventName = (TextView) view.findViewById(R.id.attendingEventInListviewRow);
        cancelArrive = (Button) view.findViewById(R.id.cancel_arrive);
        editBtn=(Button)view.findViewById(R.id.editBtn);
        editBtn.setVisibility(View.GONE);
    }
    if (myEvent != null) {
        if (myEvent.getOwner()== LocalDataBase.getCurrentUser()) {
        editBtn.setVisibility(View.VISIBLE);

         }

我仍然希望“NOPE”按钮和Events2Go文本视图留在他们的位置,但实际发生的是:http://prntscr.com/bxoggo

让他们坚持到位的最佳方式是什么?

修改

现在我知道问题是“GONE”和“INVISIBLE”之间的区别。

2 个答案:

答案 0 :(得分:3)

我想现在你正在隐藏editBtn,就像这样

  

editBtn.setVisibility(View.GONE);

将此更改为

  

editBtn.setVisibility(View.INVISIBLE);

让我知道它是否有效,如果不能检查

答案 1 :(得分:0)

使用RelativeLayout。尝试

<RelativeLayout         
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/cancel_arrive"
        android:orientation="horizontal">

        <Button
            android:id="@+id/editBtn"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="36dp"
            android:onClick="editEvent"
            android:text="EDIT" />

        <TextView
            android:id="@+id/attendingEventInListviewRow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:height="30sp"
            android:tag="Events2goName"
            android:text="Events2go"
            android:textColor="#000000"
            android:textSize="22sp"
            android:textStyle="normal"
            android:layout_gravity="right"
            />

    </LinearLayout>

    <Button
        android:id="@+id/cancel_arrive"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="36dp"
        android:layout_alignParentRight="true"
        android:onClick="selectCancelArrive"
        android:text="Nope" />

</RelativeLayout>