弹出式布局设计

时间:2014-05-16 06:40:39

标签: android android-layout android-dialog android-dialogfragment android-popupwindow

在Android App中,我有一个使用线性布局和图像按钮设计的纸牌游戏。在完成这个游戏的关卡时,我必须做以下事情......

  1. 我必须在屏幕中间弹出一个像屏幕一样的对话框。此弹出窗口应该包含一些背景图像和按钮。弹出窗口应该是自下而上的。

  2. 显示此弹出窗口时,纸牌游戏父屏幕应该模糊。

  3. 我在Appflood展示广告时看到了类似的效果。

    你能否有效地提出一些建议。

    父屏幕

    enter image description here

    使用弹出窗口

    enter image description here

    先谢谢..

2 个答案:

答案 0 :(得分:1)

我有一个非常简单的解决方案(我测试了它 - 它运行得很好,如我发布的图片所示)。

想象一下,你有一个不可见的(GONE)通用视图,它覆盖了整个屏幕(match_parent,match_parent)并且具有偏红的半透明颜色。
在解雇之后再次显示Dialog和GONE之前会变得可见。

由于它已经过去了,你不会看到它并且在它变得可见之前它不会浪费任何空间。

此方法要求外部容器为FrameLayout或RelativeLayout(通过正确设置View:将其锚定到四个父角的角落)。
我使用了RelativeLayout - 因为我真的很喜欢这些容器。

<强> dlg_red_bg.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    android:padding="8dp"
    >
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@android:color/black"
        android:padding="8dp"
        >
        <Button
            android:id="@+id/btnTopLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:background="@drawable/ball"
            android:text="Btn 1"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnTopRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/btnTopLeft"
            android:background="@drawable/ball"
            android:text="Btn 2"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnBottomLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/btnTopLeft"
            android:layout_alignParentLeft="true"
            android:background="@drawable/ball"
            android:text="Btn 3"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnBottomRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/btnTopRight"
            android:layout_toRightOf="@id/btnBottomLeft"
            android:background="@drawable/ball"
            android:text="Btn 4"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
        <Button
            android:id="@+id/btnDialog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/ball"
            android:onClick="clickHandler"
            android:text="Dialog"
            android:textColor="@android:color/white"
            android:textSize="24sp"
            android:textStyle="bold"
        />
    </RelativeLayout>
    <View
        android:id="@+id/vwRedOver"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:background="#8f00"
        android:visibility="gone"
    />
</RelativeLayout>
用于突出显示背景的

代码

public void clickHandler(final View v)
{
    switch(v.getId())
    {
        case R.id.btnDialog:
        {
            vwRedOver.setVisibility(View.VISIBLE);

            final AlertDialog.Builder bld = new AlertDialog.Builder(this);
            bld.setMessage("Some Message")
            .setCancelable(true)
            .setPositiveButton
            (
                "OK",
                new DialogInterface.OnClickListener()
                {
                    @Override
                    public final void onClick
                    (final DialogInterface dlg, final int id)
                    {
                        vwRedOver.setVisibility(View.GONE);
                        dlg.cancel();
                    }
                }
            )
            .setNegativeButton
            (
                "Cancel",
                new DialogInterface.OnClickListener()
                {
                    @Override
                    public final void onClick
                    (final DialogInterface dlg, final int id)
                    {
                        vwRedOver.setVisibility(View.GONE);
                        dlg.cancel();
                    }
                }
            );
            bld.create().show();
        }
    }
}

<强>结果

点击&#34;对话框&#34;

之前

enter image description here

点击&#34;对话框&#34;
注1:由于黑色背景,它很暗 注意2:你看到一个黑色边框,因为我在外部RelativeLayout上设置了一个填充 - 你可以删除它

enter image description here

点击&#34; OK&#34;或&#34;取消&#34; - 返回初始状态(我的Dialog没有做任何有趣的事情 - 它仅用于演示目的)

enter image description here

答案 1 :(得分:1)

试试:

不要使用AlertDialog,您可以使用一个普通布局和一个普通类。 ¿如何?

很简单,你有一个名为“FirstActivity.java”的类,还有一个名为“SecondActivity.java”的类。

<强> FirstActivity

按照您的喜好设计这个课程

<强> SecondActivity

您将使用ImageView,按钮和文本视图创建自己的弹出窗口,并且您将覆盖布局背景。

<强> Popup_layout.xml

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

    <ImageView
        android:id="@+id/popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:src="@drawable/popup_background" />

    <ImageView
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="39dp"
        android:layout_marginTop="72dp"
        android:onClick="go"
        android:src="@drawable/ok" />

    <TextView
    android:id="@+id/question"
    android:text:"level completed"


</RelativeLayout>

<强>清单

使用自定义主题声明SecondActivity。

......

 <activity
            android:name="com.example.comandero.SecondActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Overlay" />  
.......

<强> Styles.xml

在布局上为背景添加新样式。

<style name="Theme.Overlay" parent="android:style/Theme.Translucent">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:background">@android:color/transparent</item>
    </style>

试试看,请说。如果你不明白有人说我。