android相对布局中的可折叠元素

时间:2013-10-22 13:49:45

标签: android android-layout user-interface

我有一个RelativeLayout家长,其中ImageButton位于layout_below内,排列着layout_alignRightgone等。这为我提供了预期的布局。

this

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

所以基本上,我正在寻找类似CSS浮动的东西。这可以通过<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> 实现还是其他布局更好?

这是布局(简化):

{{1}}

1 个答案:

答案 0 :(得分: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);
}