0

我有一个RelativeLayout父母,ImageButton里面有 s,用 , 等排列layout_belowlayout_alignRight这给了我预期的布局。

这个.

我希望能够折叠其中一些按钮,以便后面的按钮“向上”移动一个空格。如果我用 隐藏一个或多个按钮的可见性gone,那么整个事情就会变得混乱,因为它们是相对于彼此布置的。我不能求助于GridView,因为我必须能够在 API 7+ 上运行。

所以基本上,我正在寻找类似 CSS 浮动的东西。这可以通过其他布局实现RelativeLayout还是其他布局更好?

这是布局(简化):

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="?theme_background" >

    <RelativeLayout
        android:id="@+id/headerLayout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dip"
        android:background="?theme_header_background">

    <ImageButton
        android:id="@+id/imgBtnAbout"
        android:layout_width="30dip"
        android:layout_height="30dip"
        android:background="@drawable/ic_action_about"
        android:layout_alignParentLeft="true"
        android:scaleType="fitXY"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/header"
        android:text="App Name"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textColor="?theme_header_text"
        android:layout_centerInParent="true" />

    <ImageButton
        android:id="@+id/imgBtnSetting"
        android:layout_width="30dip"
        android:layout_height="30dip"
        android:background="@drawable/ic_action_settings"
        android:layout_alignParentRight="true"/>

    </RelativeLayout>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true"
        android:orientation="vertical"
        android:background="?theme_background"
        android:layout_below="@+id/headerLayout">

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:weightSum="1.0"
            tools:context=".MainActivity">

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn1"
                android:scaleType="centerCrop"
                android:background="#222"
                android:layout_margin="5dp" />

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn2"
                android:layout_below="@+id/imBtn1"
                android:scaleType="centerCrop"
                android:background="#222"
                android:layout_margin="5dp" />

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:id="@+id/imBtn3"
                android:layout_below="@+id/imBtn2"
                android:scaleType="centerCrop"
                android:background="@null"
                android:layout_margin="5dp" />

            <View android:id="@+id/fakeView1"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_centerInParent="true"
                android:layout_below="@+id/imBtnAd" />

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn4"
                android:layout_alignRight="@+id/fakeView1"
                android:layout_alignTop="@+id/fakeView1"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                android:background="#222"
                android:layout_margin="5dp"/>

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn5"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                android:background="#222"
                android:layout_alignLeft="@+id/fakeView1"
                android:layout_alignTop="@+id/fakeView1"
                android:layout_margin="5dp"/>

            <View android:id="@+id/fakeView2"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_centerInParent="true"
                android:layout_below="@+id/imBtnBiz" />

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn6"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                android:background="#222"
                android:layout_alignRight="@+id/fakeView2"
                android:layout_alignTop="@+id/fakeView2"
                android:layout_alignParentLeft="true"
                android:layout_margin="5dp"/>

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn7"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                android:background="#222"
                android:layout_alignLeft="@+id/fakeView2"
                android:layout_alignTop="@+id/fakeView2"
                android:layout_margin="5dp"/>

            <View android:id="@+id/fakeView3"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_centerInParent="true"
                android:layout_below="@+id/imBtnAuto" />

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn8"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                android:background="#222"
                android:layout_alignRight="@+id/fakeView3"
                android:layout_alignTop="@+id/fakeView3"
                android:layout_margin="5dp"/>

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn9"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                android:background="#222"
                android:layout_alignLeft="@+id/fakeView3"
                android:layout_alignTop="@+id/fakeView3"
                android:layout_margin="5dp"/>

            <View android:id="@+id/fakeView4"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_centerInParent="true"
                android:layout_below="@+id/imBtnHumor" />

            <ImageButton
                android:layout_width="fill_parent"
                android:layout_height="100dp"
                android:id="@+id/imBtn10"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                android:background="#222"
                android:layout_alignRight="@+id/fakeView4"
                android:layout_alignTop="@+id/fakeView4"
                android:layout_margin="5dp"/>

        </RelativeLayout>

    </ScrollView>
</RelativeLayout>
4

1 回答 1

1

可能您可能会选择另一种策略:不要尝试隐藏按钮,而是只显示所需的按钮。您可以像这样以编程方式执行此操作:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if(showButtonB1) {
   Button b1 = new Button(this);
   //then set button image here
   layout.addView(b1);
  }

  if(showOtherButton){
  //...the same
  }

  //when all buttons needed were created:
  setContentView(layout);
}
于 2013-10-22T14:09:26.963 回答