如何使Spinner和TextView垂直居中对齐

4
我有一个Spinner和一个TextView在我的LinearLayour中。
我正在尝试使Spinner和TextView垂直对齐,以便两者的中心位于同一行:
这是该元素的XML代码:
 <LinearLayout
    android:id="@+id/dropdownlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_gravity="center" />

    <TextView
        android:id="@+id/ok1"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:background="@drawable/white_box"
        android:gravity="center"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:text="@string/ok"
        android:textColor="@android:color/black"
        android:textSize="@dimen/normale" />

</LinearLayout>

尝试了这段代码,结果相同:
  <RelativeLayout
    android:id="@+id/dropdownlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:gravity="center" />

    <TextView
        android:id="@+id/ok1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/spinner1"
        android:background="@drawable/white_box"
        android:gravity="center"
        android:padding="10dp"
        android:text="@string/ok"
        android:textColor="@android:color/black"
        android:textSize="@dimen/normale" />
</RelativeLayout>

几个解决方案。玩转Gravity和Layout_gravity。从我看到的,您已经在LinearLayout中使用了gravity,在Spinner和TextView中使用了layout_gravity,并在其上面使用了gravity。否则,请尝试使用RelativeLayout并使用CenterInParent。 - An-droid
@Yume117 谢谢你的建议,但相信我,我已经尝试了很多次!! :-) - Lisa Anne
文本视图的 paddingRight 是否会影响居中对齐? - wyoskibum
@wyoskibum 嗯...我不知道...那可能吗?因为我需要一些填充来使盒子不太小。 - Lisa Anne
你应该在线性布局中使用layout_gravity,不是吗? - wyoskibum
4个回答

3
请注意,您不能在RelativeLayout中使用Gravity或Layout_gravity。
以下是一个操作示例。它可以完美地工作(它位于列表视图单元格右侧并垂直居中)。
<RelativeLayout
        android:id="@+id/right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_margin="4dp" >

        <TextView
            android:id="@+id/annuaire_distance_etablissement"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginRight="4dp"
            android:layout_toLeftOf="@+id/arrow_img"
            android:singleLine="true"
            android:textColor="@color/clr_main_green"
            android:textSize="12sp" />

        <ImageView
            android:id="@+id/arrow_img"
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="4dp"
            android:src="@drawable/icone_fleche" />
    </RelativeLayout>

感谢您的评论,Yume117。我按照您的建议尝试了,但是没有成功:结果相同。 - Lisa Anne
这是一个布局/定位问题,你唯一的解决方案就是尝试不同的方法(LinearLayout/RelativeLayout,使用线性重力,使用RelativeLayout的layout_centerVertical/centerInParent):/ 编辑:你尝试将spinner的高度设置为match_parent了吗? ====> 如果我处于这种情况下,我会使用水平LinearLayout,并使spinner和TextView都具有weight=50,高度为48dp,宽度为matchparent,以便它们具有相同的大小,并添加一些填充到LinearLayout中,使其看起来更好... - An-droid
我试图对齐一个TextView和一个Spinner,将android:layout_centerVertical="true"添加到TextView中就解决了问题。这是使用RelativeLayout实现的。 - Randall Cook
请将以下与编程有关的内容从英语翻译为中文。仅返回翻译后的文本:只需用您的旋转器替换任何组件。 - An-droid

2

在相对布局中尝试像这样:

[<RelativeLayout
    android:id="@+id/dropdownlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="250dp"
         android:gravity="center"
        android:background="@android:drawable/btn_dropdown"
        android:layout_centerVertical="true"
        android:layout_height="40dp"
        android:layout_gravity="center" />

    <TextView
        android:id="@+id/ok1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/white_box"
        android:gravity="center"
        android:layout_centerVertical="true"
        android:paddingLeft="10dp"
        android:layout_toRightOf="@+id/spinner1"
        android:paddingRight="10dp"
        android:text="@string/ok"
        android:textColor="@android:color/black"
        android:textSize="@dimen/normale" />
</RelativeLayout>]

enter image description here


谢谢Brontok,但是当我在真实设备上运行它时,结果和之前一样 :-( 无论如何还是谢谢。 - Lisa Anne
嗯,您能否请指明您正在使用哪个设备? - Jitender Dev
Galaxy ACE。但我认为问题不在手机上。我已经根据您的建议编辑了代码,请看一下。 - Lisa Anne

2
您可以简单地将SpinnerTextView包装在一个LinearLayout中,就像这样:
<LinearLayout 
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="horizontal" >

删除行

android:layout_toRightOf="@+id/spinner1"

如果您希望,可以通过添加layout_below、layout_above等属性来使LinearLayout相对定位。

然后,在TextViewSpinner中都添加以下内容:

android:layout_gravity="center_vertical"

谢谢Joseph82,我尝试了你的解决方案,但没有更好的运气:结果相同...:-((( - Lisa Anne
对不起 @Lisa,我没有其他的想法。:( - GVillani82

1
你应该坚持使用线性布局,并尝试以下TextView操作:
android:layout_gravity="center_vertical"

然后在您的TextView中,您应该更改


android:layout_height="fill_parent"

转换为

android:layout_height="wrap_content"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接