Jawaban:
Untuk memulai aktivitas sebagai dialog, saya mendefinisikannya seperti ini di AndroidManifest.xml
:
<activity android:theme="@android:style/Theme.Dialog" />
Gunakan properti ini di dalam activity
tag Anda untuk menghindari agar Dialog Anda muncul di daftar aplikasi yang baru saja digunakan
android:excludeFromRecents="true"
Jika Anda ingin menghentikan dialog / aktivitas Anda dari kehancuran ketika pengguna mengklik di luar dialog:
Setelah setContentView()
Anda Activity
gunakan:
this.setFinishOnTouchOutside(false);
Sekarang ketika saya menyebutnya startActivity()
menampilkan sebagai dialog, dengan aktivitas sebelumnya ditampilkan ketika pengguna menekan tombol kembali.
Perhatikan bahwa jika Anda menggunakan ActionBarActivity
(atau tema AppCompat), Anda harus menggunakannya @style/Theme.AppCompat.Dialog
.
@style/Theme.AppCompat.Dialog
this.setFinishOnTouchOutside(false);
setelah setContentView()
untuk mencegah aktivitas dihancurkan ketika Anda mengklik di luar dialog yang Anda buat.
Gunakan kode ini sehingga aktivitas dialog tidak akan ditutup ketika pengguna menyentuh di luar kotak dialog:
this.setFinishOnTouchOutside(false);
membutuhkan API level 11
Anda dapat mendefinisikan gaya ini dalam values / styles.xml untuk melakukan Splash yang lebih lama:
<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>
Dan gunakan itu AndroidManifest.xml:
<activity android:name=".SplashActivity"
android:configChanges="orientation"
android:screenOrientation="sensor"
android:theme="@style/Theme.UserDialog">
@drawable/trans
: Anda harus dapat menggunakan @android:color/transparent
yang akan membuat ColorDrawable
untuk digunakan sebagai latar belakang.
1 - Anda dapat menggunakan aktivitas yang sama dengan dialog dan layar penuh, secara dinamis:
Panggil setTheme(android.R.style.Theme_Dialog)
sebelum menelepon setContentView(...)
dan super.oncreate()
dalam Aktivitas Anda.
2 - Jika Anda tidak berencana mengubah gaya tema aktivitas yang dapat Anda gunakan
<activity android:theme="@android:style/Theme.Dialog" />
(seperti yang disebutkan oleh @faisal khan)
<activity android:theme="@android:style/Theme.Dialog" />
) dan setel program secara terprogram untuk dialog atau aktivitas di onCreate stackoverflow.com/a/35915764/2898715
Jika Anda membutuhkan Versi 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>
<item name="windowNoTitle">true</item>
untuk membuatnya bekerja untuk saya. Saya juga menambahkan <item name="android:windowActionBar">false</item>
untuk ukuran yang baik.
<item name="android:windowNoTitle">true</item>
tidak bekerja (Android 5.0.1), dan saya harus mengubah ke<item name="windowNoTitle">true</item>
Jika aktivitas Anda diterjemahkan sebagai dialog, cukup tambahkan tombol ke xml aktivitas Anda,
<Button
android:id="@+id/close_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Dismiss" />
Kemudian lampirkan pendengar klik dalam kode Java Activity Anda. Di pendengar, cukup panggilfinish()
Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Itu akan mengabaikan dialog Anda, mengembalikan Anda ke aktivitas menelepon.
Jika Anda ingin menghapus tajuk aktivitas & memberikan tampilan khusus untuk dialog, tambahkan berikut ini ke blok aktivitas manifes Anda
android:theme="@style/Base.Theme.AppCompat.Dialog"
dan rancang activity_layout Anda dengan tampilan yang Anda inginkan
Setel tema di file manifes Android Anda.
<activity android:name=".LoginActivity"
android:theme="@android:style/Theme.Dialog"/>
Dan atur status dialog pada sentuhan untuk menyelesaikan.
this.setFinishOnTouchOutside(false);
Buat aktivitas sebagai dialog, Ini Contoh Lengkap
AndroidManife.xml
<activity android:name=".appview.settings.view.DialogActivity" android:excludeFromRecents="true" android:theme="@style/Theme.AppCompat.Dialog"/>
DialogActivity.kt
class DialogActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dialog)
this.setFinishOnTouchOutside(true)
btnOk.setOnClickListener {
finish()
}
}
}
activity_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0072ff"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="@dimen/_300sdp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/txtTitle"
style="@style/normal16Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Download"
android:textColorHint="#FFF" />
<View
android:id="@+id/viewDivider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#fff"
android:backgroundTint="@color/white_90"
app:layout_constraintBottom_toBottomOf="@id/txtTitle" />
<TextView
style="@style/normal14Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Your file is download"
android:textColorHint="#FFF" />
<Button
android:id="@+id/btnOk"
style="@style/normal12Style"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginBottom="20dp"
android:background="@drawable/circle_corner_layout"
android:text="Ok"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
Beberapa kali Anda bisa mendapatkan Pengecualian yang diberikan di bawah ini
Disebabkan oleh: java.lang.IllegalStateException: Anda perlu menggunakan tema Theme.AppCompat (atau keturunan) dengan aktivitas ini.
Jadi untuk menyelesaikannya Anda bisa menggunakan solusi sederhana
tambahkan tema aktivitas Anda dalam manifes sebagai dialog untuk appCompact.
android:theme="@style/Theme.AppCompat.Dialog"
Ini dapat bermanfaat bagi seseorang.