Saya bertanya-tanya apakah seseorang dapat membantu saya. Saya mencoba membuat AlertDialog kustom. Untuk melakukan ini, saya menambahkan baris kode berikut di styles.xml
<resources>
<style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
<item name="android:windowBackground">@drawable/color_panel_background</item>
</style>
</resources>
- color_panel_background.9.png terletak di folder yang dapat digambar. Ini juga tersedia di folder res Android SDK.
Berikut ini adalah kegiatan utama.
package com.customdialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
public class CustomDialog extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setTheme(R.style.CustomAlertDialog);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("HELLO!");
builder .setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//dialog.cancel();
}
});
AlertDialog alertdialog = builder.create();
alertdialog.show();
}
}
Untuk menerapkan tema ke AlertDialog, saya harus mengatur tema ke konteks saat ini.
Namun, saya sepertinya tidak bisa mendapatkan aplikasi untuk menampilkan AlertDialog yang disesuaikan. Adakah yang bisa membantu saya dengan ini?
Jawaban:
Di Dialog.java (Android src) digunakan ContextThemeWrapper. Jadi, Anda dapat menyalin ide dan melakukan sesuatu seperti:
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));
Dan gaya itu seperti yang Anda inginkan:
sumber
@android:style/Theme.Dialog
publik? Bisakah itu digunakan?Theme.AppCompat.Light.Dialog.Alert
gaya sebagai induk dari gaya kustom Anda. Tetapi, jika Anda melakukan ini, pastikan Anda mengimporimport android.support.v7.app.AlertDialog;
dan tidakimport android.app.AlertDialog
Saya mengalami
AlertDialog
masalah terkait tema ini menggunakan SDK 1.6 seperti dijelaskan di sini: http://markmail.org/message/mj5ut56irkrkc4nrSaya memecahkan masalah dengan melakukan hal berikut:
Semoga ini membantu.
sumber
Saya telah menulis artikel di blog saya tentang cara mengkonfigurasi tata letak AlertDialog dengan file gaya XML. Masalah utama adalah bahwa Anda memerlukan definisi gaya yang berbeda untuk parameter tata letak yang berbeda. Berikut ini adalah pelat dasar berdasarkan gaya AlertDialog dari Holo Light Platform versi 19 untuk file gaya yang harus mencakup banyak aspek tata letak standar seperti ukuran teks dan warna latar belakang.
sumber
sumber
Saya kesulitan dengan ini - Anda dapat mengatur latar belakang dialog menggunakan
android:alertDialogStyle="@style/AlertDialog"
tema Anda, tetapi mengabaikan semua pengaturan teks yang Anda miliki. Seperti @rflexor mengatakan di atas itu tidak dapat dilakukan dengan SDK sebelum Honeycomb (baik Anda bisa menggunakanReflection
).Solusi saya, singkatnya, adalah gaya latar belakang dialog menggunakan di atas, kemudian atur judul kustom dan tampilan konten (menggunakan tata letak yang sama dengan yang ada di SDK).
Pembungkus saya:
alert_dialog_title.xml (diambil dari SDK)
alert_dialog_message.xml
Kemudian gunakan saja
CustomAlertDialogBuilder
alih-alihAlertDialog.Builder
untuk membuat dialog Anda, dan panggil sajasetTitle
dansetMessage
seperti biasa.sumber
Anda dapat langsung menetapkan tema saat Anda memulai Builder:
Kemudian sesuaikan tema Anda di
values/styles.xml
sumber
Theme.AppCompat.Light.Dialog.Alert
Untuk Dialog Kustom:
panggil saja
super(context,R.style.<dialog style>)
bukansuper(context)
di konstruktor dialogUntuk AlertDialog:
Cukup buat alertDialog dengan konstruktor ini:
sumber
Saya kira itu tidak bisa dilakukan. Setidaknya tidak dengan Builder. Saya bekerja dengan 1.6 dan Implementasi di Builder.create () adalah:
yang menyebut konstruktor "not-theme-aware" dari AlertDialog, yang terlihat seperti ini:
Ada konstruktor kedua di AlertDialog untuk mengubah tema:
bahwa Builder tidak menelepon.
Jika Dialog itu cukup generik, saya akan mencoba menulis subkelas AlertDialog, memanggil konstruktor kedua dan menggunakan kelas itu alih-alih mekanisme Builder.
sumber
Cara yang lebih baik untuk melakukan ini menggunakan dialog khusus dan menyesuaikan sesuai kebutuhan Anda di sini adalah contoh dialog khusus .....
}
Berikut ini adalah tata letak xml
sumber
Siapa pun yang mencoba melakukan ini dalam Fragmen (menggunakan perpustakaan dukungan yaitu pra API 11) harus pergi dengan ini:
@Rflexor memberi saya dorongan untuk memperpanjang AlertDialog dan mengekspos konstruktor terima kasih
sumber
AlertDialog.Builder(Context, int)
hanya berfungsi pada API 11 dan di atasnya. Kode Anda akan macet pada versi Android sebelumnya.Solusi Arve Waltin terlihat bagus, meskipun saya belum mengujinya. Ada solusi lain jika Anda memiliki kesulitan mendapatkan bahwa untuk pekerjaan .... Perluas
AlertDialog.Builder
dan menimpa semua metode (misalnya.setText
,setTitle
,setView
, Dll) tidak mengatur sebenarnya Dialog ini text / title / view, tetapi untuk menciptakan tampilan baru dalam Tampilan Dialog melakukan segalanya di sana. Maka Anda bebas untuk mengatur semuanya sesuka Anda.Untuk memperjelas, sejauh menyangkut kelas induk, tampilan diatur, dan tidak ada yang lain.
Sejauh menyangkut kelas khusus kebiasaan Anda, semuanya dilakukan dalam tampilan itu.
sumber
Saya tidak yakin bagaimana solusi Arve akan bekerja dalam Dialog kustom dengan pembangun tempat tampilan meningkat melalui LayoutInflator.
Solusinya adalah dengan memasukkan ContextThemeWrapper ke inflator melalui
cloneInContext()
:sumber
Ini dapat dilakukan hanya dengan menggunakan setView Builder (). Anda dapat membuat tampilan pilihan Anda dan memasukkannya ke dalam pembuat. Ini bekerja dengan baik. Saya menggunakan TextView khusus yang diberikan oleh pembuat dialog. Saya tidak mengatur pesan dan ruang ini digunakan untuk membuat tampilan teks custome saya.
sumber
sumber