Android активность как диалог
-
22-09-2019 - |
Вопрос
У меня есть деятельность назван whereActity
у которого также есть детские диалоги. Теперь я хочу показать это действие в качестве диалога для другого действия.
Как я могу это сделать?
Решение
Чтобы начать деятельность как диалог, я определил это так в AndroidManifest.xml
:
<activity android:theme="@android:style/Theme.Dialog" />
Используйте это свойство внутри вашего activity
Теги, чтобы избежать того, что ваш диалог отображается в недавно используемом списке приложений
android:excludeFromRecents="true"
Если вы хотите остановить уничтожение диалога / деятельности, когда пользователь щелкнет вне диалогового окна:
После setContentView()
в твоей Activity
использовать:
this.setFinishOnTouchOutside(false);
Теперь, когда я звоню startActivity()
Он отображается в качестве диалога с предыдущей деятельностью, показанной, когда пользователь нажимает кнопку «Назад».
Обратите внимание, что если вы используете ActionBarActivity
(или тема appcompat), вам нужно использовать @style/Theme.AppCompat.Dialog
вместо.
Другие советы
Используйте этот код так, чтобы диалоговая деятельность не была закрыта, когда пользователь касается диалогового окна:
this.setFinishOnTouchOutside(false);
Требуется API -уровень 11
Вы можете определить этот стиль в значениях/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">
1 - Вы можете использовать одну и ту же деятельность, что и диалог, и полный экран, динамически:
Вызов setTheme(android.R.style.Theme_Dialog)
перед звонком setContentView(...)
а также super.oncreate()
в вашей деятельности.
2 - Если вы не планируете менять стиль темы деятельности, вы можете использовать
<activity android:theme="@android:style/Theme.Dialog" />
(Как упоминалось @faisal 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>
Если ваша деятельность отображается в качестве диалога, просто добавьте кнопку в 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();
}
});
Это должно отклонить ваш диалог, возвращая вас к вызову.
Если вы хотите удалить заголовок активности и предоставить пользовательское представление для диалога, добавьте следующее в блок активности вашего Manifest
android:theme="@style/Base.Theme.AppCompat.Dialog"
и спроектируйте свою active_layout с желаемым представлением
Установите тему в вашем файле манифеста Android.
<activity android:name=".LoginActivity"
android:theme="@android:style/Theme.Dialog"/>
И установите состояние диалога на Touch, чтобы закончить.
this.setFinishOnTouchOutside(false);