对话框部分隐藏
dialog partially hidden
在一些 Activity 我有按钮,它打开对话框(在图片上标记为片段)。
在这个对话框中,我有一些其他的按钮和 EditText。
默认情况下,焦点设置为 EditText。
问题是,当对话框打开时,它没有完全显示。按钮隐藏在屏幕后面(图片上的屏幕和隐藏部分),所以我必须向上滚动才能看到按钮。
我试过禁用 EditText 焦点,尝试将焦点设置到 Button,但 Dialog 仍然没有完全显示。
有什么方法可以强制对话框完全打开?
看来,对话框刚好占了屏幕的一半。如果里面没有很多元素,它会完整显示,如果有 - 我必须滚动。
更新:
我的对话框使用具有以下结构的自定义 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="300dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="16dp">
<TextView
android:id="@+id/title"/>
</LinearLayout>
<RelativeLayout
android:id="@+id/someid"
android:layout_width="match_parent"
android:layout_height="300dp"
android:visibility="gone"
tools:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="270dp"
android:orientation="vertical"
android:visibility="visible"
tools:visibility="visible">
<LinearLayout
android:id="@+id/editTextLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="13dp"
android:gravity="bottom"
android:orientation="horizontal">
<EditText
android:id="@+id/EditText"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<Button
android:id="@+id/Button" />
</LinearLayout>
<View
android:id="@+id/overlayButtons"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_70"
android:visibility="gone"
tools:visibility="gone" />
</RelativeLayout>
</LinearLayout>
P.S。结构很复杂,因为我里面有很多其他元素,比如按钮、文本等。我删除了它们,只留下重要的一个,例如 Linear/Relative 布局。
好的,我已经弄明白了。
无法通过布局定义对话框的高度,所以我不得不在代码中定义它。
这是代码片段:
DisplayMetrics displayMetrics = getActivity().getResources().getDisplayMetrics();
int height = displayMetrics.heightPixels;
int maxHeight = (int) (height*0.75);
final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from((View) view.getParent());
bottomSheetBehavior.setPeekHeight(maxHeight);
所以现在,如果需要,对话框最多可以占据屏幕高度的 75%。
在一些 Activity 我有按钮,它打开对话框(在图片上标记为片段)。
在这个对话框中,我有一些其他的按钮和 EditText。
默认情况下,焦点设置为 EditText。
问题是,当对话框打开时,它没有完全显示。按钮隐藏在屏幕后面(图片上的屏幕和隐藏部分),所以我必须向上滚动才能看到按钮。
我试过禁用 EditText 焦点,尝试将焦点设置到 Button,但 Dialog 仍然没有完全显示。
有什么方法可以强制对话框完全打开?
看来,对话框刚好占了屏幕的一半。如果里面没有很多元素,它会完整显示,如果有 - 我必须滚动。
更新: 我的对话框使用具有以下结构的自定义 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="300dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="16dp">
<TextView
android:id="@+id/title"/>
</LinearLayout>
<RelativeLayout
android:id="@+id/someid"
android:layout_width="match_parent"
android:layout_height="300dp"
android:visibility="gone"
tools:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="270dp"
android:orientation="vertical"
android:visibility="visible"
tools:visibility="visible">
<LinearLayout
android:id="@+id/editTextLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="13dp"
android:gravity="bottom"
android:orientation="horizontal">
<EditText
android:id="@+id/EditText"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<Button
android:id="@+id/Button" />
</LinearLayout>
<View
android:id="@+id/overlayButtons"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_70"
android:visibility="gone"
tools:visibility="gone" />
</RelativeLayout>
</LinearLayout>
P.S。结构很复杂,因为我里面有很多其他元素,比如按钮、文本等。我删除了它们,只留下重要的一个,例如 Linear/Relative 布局。
好的,我已经弄明白了。
无法通过布局定义对话框的高度,所以我不得不在代码中定义它。
这是代码片段:
DisplayMetrics displayMetrics = getActivity().getResources().getDisplayMetrics();
int height = displayMetrics.heightPixels;
int maxHeight = (int) (height*0.75);
final BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from((View) view.getParent());
bottomSheetBehavior.setPeekHeight(maxHeight);
所以现在,如果需要,对话框最多可以占据屏幕高度的 75%。