2011-03-10 40 views
9

我正尝试在Android中创建此简单布局。无法通过“fill_parent”获得正确的布局

enter image description here

一个应该换到适合其内容和left|center_vertical对齐。

B应该尽可能扩大,填满所有的空白空间。

C应该是右对齐的,包装以填充其内容并且也被对齐center_vertical

这里是我的布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:gravity="left|center_vertical"> 
    <!-- A --> 
    <ImageView android:id="@+id/example_item_icon" 
      android:layout_width="48px" 
      android:layout_height="48px"/> 
    <!-- B --> 
    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="left|center_vertical" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold|italic" 
       android:lines="1" 
       android:textSize="10px"/> 
    </LinearLayout> 
    <!-- C --> 
    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout> 

在这种布局中,Ç推离屏幕。我怎样才能使这个布局工作?

回答

19

fill_parent的意思是“与父母一样大”,而不是“使用剩余的空白空间”。而不是fill_parent,只需使用android:layout_width =“0dip”和android:layout_weight =“1”即可。

+0

哦,陷阱。我认为'fill_parent'意思是'尽可能地扩大来填充父',不像'match_parent' ='字面匹配父'的大小。 – 2011-03-10 00:44:21

+1

match_parent是fill_parent的新名称:) – 2011-03-10 01:31:32

+0

史诗般的胜利。 \ m/:) – 2011-03-10 01:38:37

0

试试这个。我将ImageViews替换为TextViews,以便在XML编辑器中显示。请注意,我保持“A”的48px宽度,这不是我认为你真的想要的。用wrap_content替换它。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:gravity="center_vertical"> 

    <!-- A --> 
    <TextView android:layout_height="48px" 
    android:id="@+id/example_item_count_text2" 
    android:textSize="14px" 
    android:layout_weight="1" 
    android:text="this is item a" 
    android:textStyle="bold" 
    android:layout_width="48px"> 
    </TextView> 

    <!-- B --> 
    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="center_vertical" 
      android:layout_weight="1" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="this is B" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="this should be underneath B" 
       > 
    </LinearLayout> 

    <!-- C --> 
    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="this is item c" 
      android:layout_weight="1" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout> 
2

的伎俩,使用相对布局......这里是一个例子(关闭我的头顶部 - 没有检查和失踪高度场和垂直对齐设置,可以很容易地看到重要的东西)。

<relativelayout android:width="fillParent"> 
    <textview android:id="@+id/left" android:text="left" 
       android:width="wrap_content" 
       android:layout_alignParentleft="true" /> 
    <textview android:id="@+id/right" android:text="right" 
       android:width="wrap_content" 
       android:layout_alignParentright="true" /> 
    <textview android:id="@+id/middle" android:text="middle" 
       android:width="wrap_content" 
       android:layout_alignleft="@id/right" android:layout_alignright="@id/left" /> 
</relativelayout> 

编辑:这里是清洁的错别字(并且测试作为工作)

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<TextView 
    android:id="@+id/left" 
    android:text="left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" /> 
<TextView 
    android:id="@+id/right" 
    android:text="right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" /> 
<TextView 
    android:id="@+id/middle" 
    android:text="middle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/right" 
    android:layout_toRightOf="@id/left" /> 
</RelativeLayout> 
+0

textview middle是wrap_content,它不会扩展 – max4ever 2011-05-24 11:18:52

+0

它可以在中间textview上使用width = wrap_content。我添加了错误更正的版本 - 试试。 – SteelBytes 2011-05-25 02:06:46

+0

不错!似乎使用“toLeftOf”/“toRightOf”强制“中间”展开,直到它填充“right”和“left”之间的所有空白空间,即它是LinearLayout的layout_weight的(近似)等效值。谢谢! – 2012-10-23 11:24:58

0

这里是我的答案。我只是将layout_weight设置为B1。显然,layout_weight就像基于百分比的布局方法。我不知道它是如何工作的,但这里是我的成品,看起来不错:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:gravity="left|center_vertical"> 

    <ImageView android:id="@+id/example_item_icon" 
      android:layout_width="48px" 
      android:layout_height="48px"/> 

    <LinearLayout android:orientation="vertical" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:gravity="left|center_vertical" 
      android:layout_weight="1" 
      android:padding="5px"> 

     <TextView android:id="@+id/example_item_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold"/> 

     <TextView android:id="@+id/example_item_level_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textStyle="bold|italic" 
       android:lines="1" 
       android:textSize="10px"/> 
    </LinearLayout> 

    <TextView android:id="@+id/example_item_count_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:textSize="14px"/> 
</LinearLayout>