android中心textview的布局

时间:2012-03-15 11:08:31

标签: android

我有一个包含自定义行的列表视图。在行中有这些项目:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <ImageView
    android:id="@+id/imageView1"
    android:layout_width="10dp"
    android:layout_height="fill_parent"
    android:focusable="false"
    android:scaleType="fitXY">
   </ImageView>"

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textsll"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"
    android:layout_marginLeft="5dp">          
  <TextView android:id="@+id/textView1" 
    android:layout_width="240dp" 
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:layout_alignParentBottom="true" 
    android:layout_alignParentTop="true"
    android:layout_centerVertical="true"
    android:maxLines="1"
    android:ellipsize="end">"
  </TextView>
  <TextView android:id="@+id/textView2" 
    android:layout_width="240dp" 
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/textView1"
    android:maxLines="1"
    android:ellipsize="end">
  </TextView>
  </RelativeLayout>

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textsll2"
    android:layout_gravity="center_vertical|right"
    android:layout_marginLeft="10dp">"
  <TextView android:id="@+id/textView3" 
    android:layout_width="40dp" 
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:paddingBottom="5dp"
    android:maxLines="1"
    android:ellipsize="end"
    android:gravity="center_vertical"
    android:background="#87EB81">
  </TextView>
  </LinearLayout>

</LinearLayout>

如果两个文本视图都有一些内容,它们会在行中垂直居中(差不多)。

但如果较低的textview为空,我会调用:

            holder.textView2.setVisibility(View.INVISIBLE);
            holder.textView.setGravity(Gravity.CENTER_VERTICAL);

仍然,上面的textview进入行的顶部。为什么呢?

enter image description here

如果我将它设置为View.GONE,我会得到这个,但我不希望行的高度发生变化:

enter image description here

6 个答案:

答案 0 :(得分:1)

使用android:layout_weight将主要LinearLayout的所有子项设置为相同的。

使用LinearLayout作为textView1和textView2的父级。使用android:layout_weight使每个文件具有相同的大小。

使用android:gravity="center_vertical|left"定义TextView,然后,如果您不想显示第二个TextView,请将其可见性设置为View.GONE

也许这会解决您的问题,

答案 1 :(得分:0)

尝试将一些值修改为RelativeLayout的高度,如 -

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textsll"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:layout_marginLeft="5dp">       

答案 2 :(得分:0)

<强>更新

RelativeLayout中,视图与其父级,RelativeLayout本身或其他视图对齐。例如,我们声明描述与RelativeLayout的底部对齐,并且标题位于描述的上方并锚定到父级的顶部。在GONE描述中,RelativeLayout不知道在何处定位标题的下边缘。要解决此问题,您可以使用名为layout_alignWithParentIfMissing的非常特殊的布局参数。

这个boolean参数只是告诉RelativeLayout在缺少约束目标时使用自己的边作为锚点。例如,如果您将视图定位到GONE视图的右侧并将alignWithParentIfMissing设置为true,则RelativeLayout会将视图锚定到其左边缘。在我们的情况下,使用alignWithParentIfMissing会导致RelativeLayout将标题的底部与其底部对齐。

有关Layout Tricks: Creating Efficient Layouts

的更多信息,请参阅

答案 3 :(得分:0)

通过使用RelativeLayout在父对齐的帮助下设置layout_belowlayout_above并将layout_centerInParent的值设置为true,可以在layout_centerHorizontal中实现这一点{{1}} 1}}

希望,这会奏效。

答案 4 :(得分:0)

尝试使用:

    <TextView
        ...
        android:layout_height="?android:attr/listPreferredItemHeight"
        ... 
        />
<_>在your_list_item.xml中。并使用View.GONE

答案 5 :(得分:0)

要解决您的问题,您可以做的是让LinearLayout填充Parent。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

并使用View.GONE这将使行高相同。

如果您在世界上最好的汽车之后看到差距,请尝试使用相对布局并将最后一个布局对齐到底部。