在RelativeLayout中垂直居中两个TextView

时间:2014-03-04 02:04:58

标签: android android-layout relativelayout

发生了什么

我正在编写一个包含两个TextView的PopupWindow,其中第二个TextView应该在弹出窗口中垂直居中,第一个TextView应该在它的正上方。

问题在于RelativeLayout似乎将两个TextView视为单个元素,并垂直居中于它们的中间。我希望下面的TextView是一个居中的,而上面的一个要在它上面休息(因此android:layout_above="@id/first_name")。

XML布局

注意那里显然不必要的LinearLayout因为RelativeLayout拒绝完全垂直填充屏幕(PopupWindow正在使用ViewGroup.LayoutParams.MATCH_PARENT)。

<?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" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" >

        <TextView
            android:id="@+id/first_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:singleLine="true"
            android:text="Christopher" />

        <TextView
            android:id="@+id/lbl_hello"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/first_name"
            android:gravity="center"
            android:singleLine="true"
            android:text="@string/hello" />
    </RelativeLayout>

</LinearLayout>

Java活动

LayoutInflater inflater = LayoutInflater.from(this);
final View popupView = inflater.inflate(R.layout.<fragment name>,
                                        <parent object>,
                                        false);
final PopupWindow pwindow = new PopupWindow(popupView,
                                            ViewGroup.LayoutParams.MATCH_PARENT,
                                            ViewGroup.LayoutParams.MATCH_PARENT,
                                            true);
pwindow.setTouchable(true);
new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
    }

}, 100L);

3 个答案:

答案 0 :(得分:3)

正如Sushil所说,你可以完全删除LinearLayout。以下修复应该有效;如果是这样,请尝试删除线性布局。

此处的问题是android:gravity="center"上的RelativeLayout。如果删除它,您可以获得所需的位置:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

答案 1 :(得分:1)

您可以简单地删除Linearlayout。现在你的textview是Relativelayout的子视图,它是LinearLayout的子视图。

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

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" >

        <TextView
            android:id="@+id/first_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:singleLine="true"
            android:text="Christopher" />

        <TextView
            android:id="@+id/lbl_hello"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_above="@id/first_name"
            android:gravity="center"
            android:singleLine="true"
            android:text="@string/hello" />
    </RelativeLayout>

答案 2 :(得分:0)

使用此xml:

   <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="40dp"
                android:layout_marginRight="40dp"
                android:layout_marginTop="90dp">

                <TextView
                    android:id="@+id/inv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:text="@string/invfam"
                    android:textColor="#f5f5f5"
                    android:textSize="20dp" />

                <TextView
                    android:id="@+id/promo"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/inv"
                    android:gravity="center"
                    android:layout_marginTop="10dp"
                    android:text="Enjoy an additional 15 AED off your first video consultation. Sign up for a Health at Hand account and you will be credited 30 AED as a new user plus an extra 15 AED! #feel better today"
                    android:textColor="#f5f5f5"
                    android:textSize="14dp" />

            </RelativeLayout>