Saya tidak perlu mengubah apa pun saat layar diputar. Aplikasi saya menampilkan gambar acak ketika pertama kali memuat dan memutar perangkat tidak boleh memilih gambar acak lain. Bagaimana saya dapat (secara sederhana) menghentikan perilaku ini?
152
Screen.lockOrientation(this)
dari github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… untuk ini. Ini memungkinkan membuka kunci yang manifes tidak.Jawaban:
Secara umum ada tiga cara untuk melakukan ini:
Seperti yang disarankan beberapa jawaban, Anda dapat membedakan kasus aktivitas yang dibuat untuk pertama kalinya dan dipulihkan
savedInstanceState
. Ini dilakukan denganonSaveInstanceState
mengganti dan memeriksa parameteronCreate
.Anda dapat mengunci aktivitas dalam satu orientasi dengan menambahkan
android:screenOrientation="portrait"
(atau"landscape"
) ke<activity>
dalam manifes Anda.Anda bisa mengatakan sistem yang dimaksudkan untuk menangani perubahan layar untuk diri sendiri dengan menentukan
android:configChanges="orientation|screenSize"
di<activity>
tag. Dengan cara ini aktivitas tidak akan dibuat ulang, tetapi akan menerima panggilan balik (yang dapat Anda abaikan karena tidak berguna untuk Anda).Secara pribadi saya akan pergi dengan (3). Tentu saja jika mengunci aplikasi ke salah satu orientasi baik-baik saja dengan Anda, Anda juga dapat pergi dengan (2).
sumber
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"
bekerja untukku. Terima kasih @Pacerierandroid:configChanges="orientation|screenSize"
nilai untuk API> = 13, karena banyak orang melihat jawaban Anda sebagai yang utama!Jawaban Xion sudah dekat, tetapi # 3 (
android:configChanes="orientation"
) tidak akan berfungsi kecuali aplikasi memiliki tingkat API 12 atau lebih rendah.Di API level 13 atau lebih, ukuran layar berubah ketika orientasi berubah, jadi ini masih menyebabkan aktivitas dihancurkan dan dimulai ketika orientasi berubah.
Cukup tambahkan atribut "screenSize" seperti yang saya lakukan di bawah ini:
Sekarang, ketika Anda mengubah orientasi (dan ukuran layar berubah), aktivitas mempertahankan statusnya dan
onConfigurationChanged()
dipanggil. Ini akan menjaga apa pun yang ada di layar (yaitu: halaman web di tampilan Web) ketika orientasi berubah.Pelajari ini dari situs ini: http://developer.android.com/guide/topics/manifest/activity-element.html
Juga, ini tampaknya praktik yang buruk jadi baca tautan di bawah ini tentang Menangani Perubahan Waktu Runtime:
http://developer.android.com/guide/topics/resources/runtime-changes.html
sumber
android:configChanges="orientation|screenSize"
Anda hanya perlu pergi ke bagian
AndroidManifest.xml
dalam dan di dalam label aktivitas Anda, Anda harus mengetikkan baris kode ini sebagai seseorang di sana berkata:Jadi, Anda akan memiliki sesuatu seperti ini:
Semoga berhasil!
sumber
Cukup tambahkan
android:configChanges="orientation|screenSize"
di tab aktivitas file manifes.Jadi, Aktivitas tidak akan dimulai kembali ketika orientasi berubah.
sumber
onSaveInstanceState()
danonCreate()
.Ini pengalaman saya bahwa sebenarnya lebih baik hanya berurusan dengan perubahan orientasi dengan benar daripada mencoba untuk menunjukkan perilaku yang tidak standar.
Anda harus menyimpan gambar yang sedang ditampilkan
onSaveInstanceState()
dan mengembalikannya dengan benar ketika aplikasi Anda berjalanonCreate()
lagi.sumber
android:configChanges
harus dihindari dan digunakan hanya sebagai pilihan terakhir. Harap baca Menangani Perubahan Waktu Runtime untuk informasi lebih lanjut tentang cara menangani restart dengan benar karena perubahan konfigurasi."Solusi ini sejauh ini merupakan solusi terbaik. Dalam file manifes Anda tambahkan
Dan di kelas aktivitas Anda tambahkan kode berikut
sumber
tambahkan
android:configChanges="keyboardHidden|orientation|screenSize"
untuk semua tag aktivitas aplikasi dalam manifes.sumber
Tambahkan saja ini ke
AndroidManifest.xml
Maksud saya, ada tag aktivitas, tambahkan ini sebagai parameter lain. Jika Anda membutuhkan orientasi potret, ubah lanskap menjadi potret. Semoga ini membantu.
sumber
Dalam file manifiest tambahkan ke setiap aktivitas ini. Ini akan membantu
sumber
Semua jawaban di atas tidak berfungsi untuk saya. Jadi, saya telah tetap dengan menyebutkan
label
denganscreenOrientation
seperti di bawah ini. Sekarang semuanya baik-baik sajasumber
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
sumber
Simpan detail gambar di Anda
onPause()
atauonStop()
dan gunakan dionCreate(Bundle savedInstanceState)
untuk memulihkan gambar.EDIT:
Info lebih lanjut tentang proses sebenarnya dirinci di sini http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle karena berbeda di Honeycomb daripada versi Android sebelumnya.
sumber
cukup gunakan:
android:configChanges="keyboardHidden|orientation"
sumber
Seperti yang disebutkan Pacerier,
android:configChanges="orientation|screenSize"
sumber
Saya tidak tahu apakah solusi yang terbaik, tetapi saya jelaskan di sini:
Pertama-tama, Anda perlu sertifikat dengan kelas Anda. Aplikasi aplikasi Anda ada dalam manifes ini:
Kedua, di App kelas saya saya suka ini:
Ketiga, Anda perlu mengatur bendera ke Perubahan Orientasi, dalam kasus saya, saya selalu mengaturnya ketika aktivitas sebelumnya dalam navigasi aplikasi dipanggil, jadi hanya memanggil satu kali ketika aktivitas nanti dibuat.
Jadi setiap kali saya mengubah orientasi layar saya dalam konteks itu, saya mengaturnya setiap kali mengubah pengaturan ini, memeriksa apakah ada perubahan orientasi, jika demikian, itu memvalidasi berdasarkan nilai dari bendera itu.
Pada dasarnya, saya harus menggunakannya setiap kali saya membuat permintaan retrofit asinkron, yang disebutnya setiap saat yang mengubah orientasi, terus-menerus menabrak aplikasi:
Saya tidak tahu apakah itu solusi yang paling elegan dan indah, tapi setidaknya ini fungsional :)
sumber
Tambahkan kode ini setelah
onCreate
metode, dalam aktivitas Anda yang berisiWebView
sumber