活动作为android中的对话框

时间:2012-04-03 05:40:28

标签: android android-activity dialog

我想使用 activity as dialog ,我将活动主题设为对话框&我成功。 但 我有这个问题是当我点击活动之外 它自动关闭&上一个活动开始..

我尝试了制作透明父布局的东西,它看起来不像是对话框..

我想使用此活动在我的应用程序中创建新帐户,因为它只有3个字段,因此在平板电脑中它看起来空间不大...所以我想将活动用作对话框......

然后提前...... !!! 例子将不胜感激.. !!!!!

6 个答案:

答案 0 :(得分:18)

尝试使用以下属性

    this.setFinishOnTouchOutside(false);

答案 1 :(得分: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>

答案 2 :(得分:3)

如果您还没有尝试过,那么这就是以对话框方式实现活动的方法: 在您的清单文件中,将以下属性添加到您的活动中:

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

答案 3 :(得分:2)

以我定义的对话框启动活动:

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

现在,当我startActivity()时,它显示为对话框,并在其后面显示父活动。我想要一个按钮,当单击Dialog时,它会被解除,父节点活动应该显示而不刷新页面。

创建一个我们通常创建的活动。

同时检查CustomDialogActivity.java on android.com

我认为您应该将对象创建为对话框,这会有所帮助。

这样,您可以为活动设置样式和主题。

答案 4 :(得分: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));
}

答案 5 :(得分:0)

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

移动: -

  1. 转到res - &gt;值。
  2. 打开styles.xml并添加以下主题设置。
  3. 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. 转到&#34; res&#34;。
    2. 创建新文件夹&#34; values-sw720dp&#34;。
    3. 创建新的styles.xml并添加以下主题设置。
    4. 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>