Android中的对话框式活动

9
我想使用一个 作为对话框的活动,并将活动的主题设置为对话框,我成功了。 但是问题在于,当我点击活动外部时,它会自动关闭,并启动上一个活动。
我尝试过将父布局设置为透明,但它看起来不像对话框。
我想使用这个活动来创建我的应用程序中的新帐户,因为它只有3个字段,所以在平板电脑上看起来有很多未使用的空间...所以我想将活动作为对话框使用。
提前感谢您的帮助!!!如果能提供示例就更好了!!!
6个回答

18

尝试使用以下属性

    this.setFinishOnTouchOutside(false);

7

根据您的需求修改代码。

谢谢

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/transparent"
        android:orientation="vertical"
        android:paddingBottom="20dp" >
        <RelativeLayout
            android:id="@+id/RlayMain"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="30dp"
            android:layout_marginTop="120dp"
            android:background="#FFFFFF"
            android:padding="10dp" >
            <TextView
                android:id="@+id/txtsignin"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:text="SIGN IN"
                android:textColor="#000000"
                android:textSize="25sp" />
            <EditText
                android:id="@+id/edtUserName"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/txtsignin"
                android:layout_marginTop="10dp"
                android:layout_toRightOf="@+id/txtuser"
                android:hint="USERNAME" />
            <EditText
                android:id="@+id/edtPassword"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/edtUserName"
                android:layout_marginTop="10dp"
                android:hint="PASSWORD"
                android:inputType="textPassword" />
            <Button
                android:id="@+id/btnSignIn"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/edtPassword"
                android:layout_marginTop="10dp"
                android:paddingBottom="10dp"
                android:paddingTop="10dp"
                android:text="Sign In" >
            </Button>
            <Button
                android:id="@+id/btnSignUp"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/btnSignIn"
                android:layout_marginTop="10dp"
                android:paddingBottom="10dp"
                android:paddingTop="10dp"
                android:text="Sign Up For Free!" >
            </Button>
        </RelativeLayout>
    </RelativeLayout>

我应该指出,对于那些使用这个的人来说,虽然使用_sp_最适合测量字体大小,但_dp_(通常)最适合用于布局间距等方面,并且应该用于测量边距 - 而不是 _sp_。 - Studio2bDesigns

3
如果您还没有尝试过,这是实现活动对话框的方法: 在清单文件中,向您的活动添加以下属性:
     <activity
        android:name=".MyActivityName"
        android:theme="@android:style/Theme.Dialog" />

这个程序正常工作了。活动作为对话框运行,但当我点击对话框外部时,它会自动关闭...... - Wolverine
尝试添加以下属性:android:configChanges="orientation"。 当我在我的应用程序内尝试时,当我点击外部时,它不会关闭dialogActivity。 - Tal Kanel

2

要以对话框的形式启动活动,我定义如下:

<activity android:theme="@android:style/Theme.Dialog" />

现在,当我调用startActivity()时,它会显示为对话框,并且父活动在其后显示。 我想要一个按钮,点击后关闭对话框并显示父活动,而不刷新页面。
按照通常的方式创建一个活动。
还要检查android.com上的CustomDialogActivity.java 我认为你应该将活动创建为对话框,这有助于设置样式和主题。
这样,您可以为您的活动设置样式和主题。

2

为了避免在API 11及以上版本中点击窗口外部时关闭活动,可以像Vivek所提到的那样使用this.setFinishOnTouchOutside(false);

但对于先前的API,请使用以下代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
    if ( event.getAction() == MotionEvent.ACTION_DOWN &&  isOutOfBounds(this, event)){
        return true;
    }
    return super.onTouchEvent(event);
}

private boolean isOutOfBounds(Activity context, MotionEvent event) {
    final int x = (int) event.getX();
    final int y = (int) event.getY();
    final int slop = ViewConfiguration.get(context).getScaledWindowTouchSlop();
    final View decorView = context.getWindow().getDecorView();
    return (x < -slop) || (y < -slop)
            || (x > (decorView.getWidth()+slop))
            || (y > (decorView.getHeight()+slop));
}

0

在移动设备和平板电脑中使用相同的Activity。

移动设备:

  1. 进入res -> values目录。
  2. 打开styles.xml文件并添加以下主题设置。

styles.xml:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

平板电脑 :- 以对话框形式启动活动。

  1. 进入“res”文件夹。
  2. 创建新文件夹“values-sw720dp”。
  3. 创建新的styles.xml文件并添加以下主题设置。

styles.xml :-

<style name="AppTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimary">@color/primary_color</item>
    <item name="colorPrimaryDark">@color/primary_dark_color</item>
    <item name="android:textColorPrimary">@color/white</item>
    <item name="colorAccent">@color/material_green_800</item>
    <item name="colorButtonNormal">@color/material_green_800</item>
    <item name="windowFixedHeightMajor">800dp</item>
    <item name="windowFixedHeightMinor">800dp</item>
</style>

Manifest.xml:

    <activity
    android:name=".LogInActivity"
    android:label="@string/title_activity_log_in"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme"            //set the theme activity
    android:windowSoftInputMode="adjustPan" >
    </activity>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接