web-dev-qa-db-ja.com

ダイアログとしてのAndroidアクティビティ

私はwhereActityという名前のActivityも持っていて、それには子ダイアログもあります。それでは、このアクティビティを別のアクティビティのダイアログとして表示したいと思います。

どうやってやるの?

enter image description here

238
d-man

ダイアログとして活動を開始するために、私はAndroidManifest.xmlでそれをこのように定義しました:

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

Dialogが最近使用したアプリのリストに表示されないようにするには、activityタグ内でこのプロパティを使用します。

Android:excludeFromRecents="true"

ユーザーがダイアログの外側をクリックしたときにダイアログ/アクティビティが破壊されないようにするには、次の手順を実行します。

ActivitysetContentView()の後には、

this.setFinishOnTouchOutside(false);

startActivity()を呼び出すとダイアログとして表示され、ユーザーが戻るボタンを押すと前のアクティビティが表示されます。

ActionBarActivity(またはAppCompatテーマ)を使用している場合は、代わりに@style/Theme.AppCompat.Dialogを使用する必要があります。

512
d-man

このコードを使用して、ユーザーがダイアログボックスの外側をタッチしたときにダイアログアクティビティが閉じないようにします。

this.setFinishOnTouchOutside(false);

aPIレベル11が必要

42
Maverick

このスタイルをvalues/styles.xmlで定義して、以前のスプラッシュを実行することができます。

   <style name="Theme.UserDialog" parent="Android:style/Theme.Dialog">
        <item name="Android:windowFrame">@null</item>
        <item name="Android:windowIsFloating">true</item>
        <item name="Android:windowIsTranslucent">true</item>
        <item name="Android:windowNoTitle">true</item>
        <item name="Android:background">@Android:color/transparent</item>
        <item name="Android:windowBackground">@drawable/trans</item>
    </style>

AndroidManifest.xmlを使用してください。

   <activity Android:name=".SplashActivity"
          Android:configChanges="orientation"
          Android:screenOrientation="sensor"
          Android:theme="@style/Theme.UserDialog">
26
herbertD

1 - ダイアログと全画面の両方で同じアクティビティを動的に使用できます。

アクティビティでsetTheme(Android.R.style.Theme_Dialog)およびsetContentView(...)を呼び出す前にsuper.oncreate()を呼び出してください。

2 - あなたが使用できる活動のテーマスタイルを変更する予定がない場合

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

(@faisal khanが述べたように)

22
M. Usman Khan

Appcompatのバージョンが必要な場合

style.xml

    <!-- Base application theme. -->
    <style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <!-- Customize your theme here. -->
        <item name="windowActionBar">false</item>
        <item name="Android:windowNoTitle">true</item>
    </style>

yourmanifest.xml

    <activity
          Android:name=".MyActivity"
          Android:label="@string/title"
          Android:theme="@style/AppDialogTheme">
    </activity>
17
neferpitou

アクティビティがダイアログとしてレンダリングされている場合は、アクティビティのxmlにボタンを追加するだけです。

<Button
    Android:id="@+id/close_button"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:text="Dismiss" />

次に、アクティビティのJavaコードにクリックリスナーを添付します。リスナーで、単にfinish()を呼び出します

Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

それはあなたの対話を却下し、あなたを呼び出し元のアクティビティに戻すはずです。

16
aaronsnoswell

アクティビティヘッダを削除してダイアログにカスタムビューを表示する場合は、マニフェストのアクティビティブロックに以下を追加します。

Android:theme="@style/Base.Theme.AppCompat.Dialog"

そしてあなたの望むビューであなたのactivity_layoutをデザインしてください

5
Ismail Iqbal

あなたのAndroidマニフェストファイルにテーマを設定します。

<activity Android:name=".LoginActivity"
            Android:theme="@Android:style/Theme.Dialog"/>

そして、ダイアログの状態をタッチで設定します。

this.setFinishOnTouchOutside(false);