我正在编写一个包含两个TextView的PopupWindow,其中第二个TextView应该在弹出窗口中垂直居中,第一个TextView应该在它的正上方。
问题在于RelativeLayout似乎将两个TextView视为单个元素,并垂直居中于它们的中间。我希望下面的TextView是一个居中的,而上面的一个要在它上面休息(因此android:layout_above="@id/first_name"
)。
注意那里显然不必要的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>
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);
答案 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>