屏幕底部的全宽对话框 - Android

时间:2017-08-06 10:24:57

标签: android android-layout

enter image description here

我必须在某些事件上创建类似的UX。这是Any.Do android app的用户体验。

我尝试通过将活动主题指定为Theme.AppCompat.Light.Dialog并将Window Layout Params gravity设置为Bottom来实现此目的。

但我得到了这个:

enter image description here

对话框未绘制全宽。我试图更改Theme.AppCompat.Light.Dialog的以下属性:

<item name="android:windowMinWidthMajor">100%</item>
<item name="android:windowMinWidthMinor">100%</item>

然后我明白了:

enter image description here

当我增加Minor或Major宽度属性时,对话框显示如下:

enter image description here

我的宣言:

<activity android:name=".ScreenRateReminder"
          android:theme="@style/CustomDialog"/>

样式定义:

<style name="CustomDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowMinWidthMajor">100%</item>
        <item name="android:windowMinWidthMinor">100%</item>
</style>

布局代码:

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RelativeLayout
            android:id="@+id/company_info_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp">

            <de.hdodenhof.circleimageview.CircleImageView
                android:id="@+id/logo"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:src="@drawable/building_image"/>

            <LinearLayout

                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_toRightOf="@+id/logo"
                android:layout_marginTop="20dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:layout_centerVertical="true">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Title"/>

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Tagline"/>
            </LinearLayout>
        </RelativeLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="30dp"
            android:gravity="center"
            android:orientation="horizontal">


                <ImageView
                    android:id="@+id/btn_satisfied"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_smile" />

                <ImageView
                    android:id="@+id/btn_happy"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_average"
                    android:layout_marginLeft="20dp"/>

                <ImageView
                    android:id="@+id/angry_button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_angry"
                    android:layout_marginLeft="20dp"/>

        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

活动代码:

public class RateReminderActivity extends Activity{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Window window = getWindow();
        WindowManager.LayoutParams layoutParams =  window.getAttributes();
        layoutParams .gravity = Gravity.BOTTOM;

        window.setAttributes(layoutParams);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.screen_rate_reminder);

}

我甚至尝试过:window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);

和:

wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;

但对我来说,没有什么能让对话框成为全宽。

1 个答案:

答案 0 :(得分:0)

使用此主题,它将提供透明的活动,

<style name="Theme.Transparent" parent="android:Theme.Translucent.NoTitleBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

只有setContentView的活动

public class RateReminderActivity extends Activity{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.screen_rate_reminder);

}

你的布局,

<?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="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="#fff"
        android:orientation="vertical">

        <RelativeLayout
            android:id="@+id/company_info_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingTop="10dp">

            <de.hdodenhof.circleimageview.CircleImageView
                android:id="@+id/logo"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:src="@drawable/building_image"/>

            <LinearLayout

                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginTop="20dp"
                android:layout_toRightOf="@+id/logo"
                android:orientation="vertical"
                android:paddingLeft="10dp"
                android:paddingRight="10dp">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Title"/>

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Tagline"/>
            </LinearLayout>
        </RelativeLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="30dp"
            android:gravity="center"
            android:orientation="horizontal">


            <ImageView
                android:id="@+id/btn_satisfied"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_smile"/>

            <ImageView
                android:id="@+id/btn_happy"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:src="@drawable/ic_average"/>

            <ImageView
                android:id="@+id/angry_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:src="@drawable/ic_angry"/>

        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

<强>编辑:

如果您想使用AppCompatActivityTheme.AppCompat,可以使用这样的风格,

<style name="AppThemeTransparent" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>