2011-03-02 28 views
2

列表项的垂直中心内容我有一个布点问题,我的Android应用程序:ListView中

我有使用以下布局项目的列表视图consiting:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:minHeight="40px" 
android:orientation="horizontal"> 

<TextView android:layout_gravity="center_vertical" android:textSize="20px"  android:id="@+id/track_position" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 

<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:layout_gravity="center_vertical" 
> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/track_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:paddingLeft="8dip" 
    android:textSize="14px" 
/> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/track_artist" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:paddingLeft="8dip" 
    android:textSize="8px" 

/> 

这将得到以下结果: enter image description here

但我希望将曲目标题和副标题居中。像这样: enter image description here

所以AFAIK我做了一切,以便这将是结果。

回答

7

你需要

android:gravity="center_vertical" 

在包含两个textViews,像这样的LinearLayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:minHeight="40px" 
android:orientation="horizontal"> 
<TextView 
    android:layout_gravity="center_vertical" 
    android:textSize="20px" 
    android:id="@+id/track_position" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</TextView> 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:gravity="center_vertical" 
    android:layout_gravity="center_vertical"> 
    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/track_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:paddingLeft="8dip" 
     android:textSize="14px" /> 
    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/track_artist" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:paddingLeft="8dip" 
     android:textSize="8px" /> 
</LinearLayout> 
</LinearLayout> 
+0

谢谢你!我会在今天测试。所以引力描述了内容应该如何对齐,并且layout_gravity元素应该如何在父对象中对齐? – Chris 2011-03-03 10:07:20

+1

耶,一个人做到了!相对于相对布局而言,改变不那么容易。谢谢! – Chris 2011-03-03 17:12:44

5

尝试使用android:layout_centerVertical="true"作为track_position TextView。

编辑:在Maaalte的光正确地指出的是,以上是RelativeLayout的,我发现我的布局我想它的实现需要什么...

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp"> 
    <TextView 
     android:id="@+id/start_time_short" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:padding="10dp" 
     android:textSize="16sp" > 
    </TextView> 
    <TextView 
     android:id="@+id/title" 
     android:layout_toRightOf="@+id/start_time_short" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="5dp" 
     android:paddingTop="3dp" 
     android:textSize="16sp" 
     android:ellipsize="end" 
     android:singleLine="true" > 
    </TextView> 
    <TextView 
     android:id="@+id/description" 
     android:layout_toRightOf="@+id/start_time_short" 
     android:layout_below="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="5dp" 
     android:paddingTop="3dp" 
     android:textSize="16sp" 
     android:ellipsize="end" 
     android:singleLine="true" > 
    </TextView> 
</RelativeLayout> 

在我而言,这是一个电视指南条目,左边的TextView显示时间(HH:mm),右边是电视节目的标题和说明。一切都以我为中心。

+0

我认为这是对的RelativeLayout – Maaalte 2011-03-02 23:14:56

+0

没关系啊,我会稍后检查。在“线性”和“相对布局”之间进行选择或者是“更好”或“更好性能”两种方式之一,还是一种方式对诸如将手机旋转到横向等变化做出不同的反应,都只是一种品味问题? – Chris 2011-03-03 10:10:37

+0

@Chris:我曾尝试使用LinearLayout,但遇到类似的问题。如果我花了更多时间,也许我可以让它工作。我在一个使用RelativeLayout的例子中遇到了一个复杂的列表项,并尝试了一下 - 第一次使用一些小模块时,它几乎工作,所以我坚持使用它。 – Squonk 2011-03-03 22:25:05

0

我不熟悉这一点,只是网站造型。但是,如果曲目和乐队总是有1行,那么您不能只为第二个LinearLayout块设置paddingTop值吗?

+0

这将是一个选项,但我打算离开项目的高度的主题,所以我不知道项目会有多高。我不明白为什么这适用于textview,但不适用于第二个linearlayout。 – Chris 2011-03-03 10:04:42