Saya mencoba menerapkan bilah judul khusus:
Ini kelas Helper saya:
import android.app.Activity;
import android.view.Window;
public class UIHelper {
public static void setupTitleBar(Activity c) {
final boolean customTitleSupported = c.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
c.setContentView(R.layout.main);
if (customTitleSupported) {
c.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
}
}
}
Di sinilah saya menyebutnya di onCreate ():
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupUI();
}
private void setupUI(){
setContentView(R.layout.main);
UIHelper.setupTitleBar(this);
}
Tapi saya mendapatkan kesalahan:
requestFeature() must be called before adding content
android
android-layout
android-activity
Sheehan Alam
sumber
sumber
Jawaban:
Lakukan saja apa yang diperintahkan oleh pesan kesalahan tersebut.
Jangan menelepon
setContentView()
sebelumnyarequestFeature()
.catatan:
Seperti yang dikatakan di komentar, untuk keduanya
ActionBarSherlock
danAppCompat
perpustakaan, perlu meneleponrequestFeature()
sebelumnyasuper.onCreate()
sumber
requestFeature()
sebelumnyasuper.onCreate()
. Referensi: github.com/JakeWharton/ActionBarSherlock/issues/…requestWindowFeature(Window.FEATURE_NO_TITLE)
untuk menyembunyikannya, lalusetContentView()
untuk tata letak pertama Anda, lalurequestWindowFeature(Window.FEATURE_CUSTOM_TITLE)
menampilkan bilah judul lagi. Itu akan terjadi setelahsetContentView()
yang kedua kalinya.requestFeature
sebelumnyasuper.onCreate()
Saya tahu usianya sudah lebih dari satu tahun, tetapi menelepon
requestFeature()
tidak pernah menyelesaikan masalah saya. Sebenarnya saya tidak menyebutnya sama sekali.Kurasa itu masalah dengan memperbesar pandangan. Terlepas dari semua pencarian saya, saya tidak pernah menemukan solusi yang cocok sampai saya bermain-main dengan berbagai metode untuk meluaskan pandangan.
AlertDialog.Builder adalah solusi yang mudah tetapi membutuhkan banyak pekerjaan jika Anda menggunakan
onPrepareDialog()
untuk memperbarui tampilan itu.Alternatif lain adalah memanfaatkan AsyncTask untuk dialog.
Solusi terakhir yang saya gunakan adalah di bawah ini:
public class CustomDialog extends AlertDialog { private View content; public CustomDialog(Context context) { super(context); LayoutInflater li = LayoutInflater.from(context); content = li.inflate(R.layout.custom_view, null); setUpAdditionalStuff(); // do more view cleanup setView(content); } private void setUpAdditionalStuff() { // ... } // Call ((CustomDialog) dialog).prepare() in the onPrepareDialog() method public void prepare() { setTitle(R.string.custom_title); setIcon( getIcon() ); // ... } }
* Beberapa catatan tambahan:
sumber
content = inflater.inflate(R.layout.custom_view, null);
mungkin haruscontent = li.inflate(R.layout.custom_view, null);
. Jadi,inflater
harus digantili
.Saya sedang memperluas DialogFragment dan jawaban di atas tidak berhasil. Saya harus menggunakan getDialog () untuk menghapus judul:
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
sumber
Bukankah kesalahan tersebut memberi tahu Anda apa yang salah? Anda menelepon
requestWindowFeature
dansetFeatureInt
setelah Anda meneleponsetContentView
.Ngomong-ngomong, kenapa kamu menelepon
setContentView
dua kali?sumber
Untuk SDK versi 23 dan yang lebih baru, RuntimeException yang sama muncul jika Anda menggunakan AppCompatActivity untuk memperluas aktivitas Anda. Ini tidak akan terjadi jika aktivitas Anda berasal langsung dari Aktivitas.
Ini adalah masalah umum di google seperti yang disebutkan di https://code.google.com/p/android/issues/detail?id=186440
Solusi yang disediakan untuk ini adalah dengan menggunakan metode supportRequestWindowFeature () daripada menggunakan requestFeature ().
Harap beri suara positif jika itu menyelesaikan masalah Anda.
sumber
Mengubah versi Kompilasi SDK , versi Sasaran SDK untuk versi Build Alat untuk 24.0.0 di build.gradle jika u menghadapi masalah dalam permintaan Fitur
sumber
Dalam kasus saya saya menunjukkan
DialogFragment
diActivity
. Dalam fragmen dialog ini saya menulis seperti di DialogFragment menghapus batas hitam :override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStyle(STYLE_NO_FRAME, 0) } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { super.onCreateDialog(savedInstanceState) val dialog = Dialog(context!!, R.style.ErrorDialogTheme) val inflater = LayoutInflater.from(context) val view = inflater.inflate(R.layout.fragment_error_dialog, null, false) dialog.setTitle(null) dialog.setCancelable(true) dialog.setContentView(view) return dialog }
Entah menghapus
setStyle(STYLE_NO_FRAME, 0)
dionCreate()
atau Chande / removeonCreateDialog
. Karena pengaturan dialog telah berubah setelah dialog dibuat.sumber
Saya mengalami masalah ini dengan Dialog berdasarkan DialogFragment yang diperpanjang yang bekerja dengan baik pada perangkat yang menjalankan API 26 tetapi gagal dengan API 23. Strategi di atas tidak berhasil tetapi saya menyelesaikan masalah dengan menghapus metode onCreateView (yang telah ditambahkan oleh template Android Studio terbaru) dari DialogFragment dan membuat dialog di onCreateDialog.
sumber