Saya memiliki aplikasi yang ingin saya gunakan dalam mode potret, jadi saya telah mendefinisikan android: screenOrientation = "portrait" di manifes XML. Ini berfungsi baik untuk ponsel HTC Magic (dan juga mencegah perubahan orientasi pada ponsel lain).
Tapi saya punya masalah dengan ponsel HTC G1 saat saya membuka perangkat keras keyboard QWERTY (bukan keyboard virtual). Aktivitas saya tetap dalam mode potret, tetapi sepertinya memulai kembali dan kehilangan semua statusnya. Ini tidak terjadi dengan HTC Hero .
Aplikasi saya cukup besar, jadi saya tidak ingin restart dan kehilangan semua statusnya saat keyboard dibuka. Bagaimana saya bisa mencegahnya?
android
android-activity
android-orientation
Vidar Vestnes
sumber
sumber
Jawaban:
Pembaruan April 2013: Jangan lakukan ini. Itu bukan ide yang baik pada tahun 2009 ketika saya pertama kali menjawab pertanyaan dan itu sebenarnya bukan ide yang baik sekarang. Lihat jawaban ini oleh hackbod untuk alasan:
Hindari memuat ulang aktivitas dengan asynctask pada perubahan orientasi di android
Tambahkan
android:configChanges="keyboardHidden|orientation"
ke AndroidManifest.xml Anda. Ini memberi tahu sistem perubahan konfigurasi apa yang akan Anda tangani sendiri - dalam hal ini dengan tidak melakukan apa pun.Lihat Konfigurasi referensi pengembang untuk lebih jelasnya.
Namun, aplikasi Anda dapat diinterupsi kapan saja, misalnya dengan panggilan telepon, jadi Anda harus menambahkan kode untuk menyimpan status aplikasi Anda ketika dijeda.
Pembaruan: Pada Android 3.2, Anda juga perlu menambahkan "screenSize":
Dari panduan Pengembang Menangani Konfigurasi Ubah Diri Anda
sumber
Anda perlu memodifikasi AndroidManifest.xml sebagai Intrications (sebelumnya Ashton) yang disebutkan dan memastikan aktivitas menangani acara onConfigurationChanged seperti yang Anda inginkan ditangani. Begini tampilannya:
sumber
setRequestedOrientation()
dionCreate()
.onConfigurationChanged()
dipanggil sebelumnyaonCreate()
jika begitu mengatur orientasi sebelum mengatur kontenDilihat di oncreate adalah pendekatan yang lebih baik , pengaturan konfigurasi di tempat itu juga lebih bersih sehingga jawaban ini masih bagus.Saya selalu menemukan Anda membutuhkan keduanya
sumber
Seperti yang dikatakan, set
android:configChanges
Aktivitas Anda (dalam file manifes) kekeyboardHidden|orientation
dan kemudian:1) Override
onConfigurationChanged()
2) Tambahkan baris ini ke aktivitas Anda
onCreate()
Lebih baik daripada menambahkan baris yang sama
onConfigurationChanged
, karena aplikasi Anda akan beralih ke mode potret dan kemudian kembali ke lansekap (itu akan terjadi hanya satu kali, tetapi itu menjengkelkan).Anda juga dapat mengatur
android:screenOrientation="nosensor"
aktivitas Anda (dalam manifes). Tetapi dengan menggunakan cara ini Anda tidak dapat menangani perubahan orientasi sama sekali.sumber
Gunakan ini..
sumber
Dalam metode OnCreate aktivitas Anda, gunakan kode ini:
Sekarang orientasi Anda akan diatur ke potret dan tidak akan pernah berubah.
sumber
Di file AndroidManifest.xml, untuk setiap aktivitas yang ingin Anda kunci tambahkan
screenOrientation
baris terakhir :Atau android: screenOrientation = "landscape" .
sumber
Dalam file androidmanifest.xml Anda :
atau
sumber
Untuk mengunci layar dengan kode Anda harus menggunakan rotasi layar yang sebenarnya (0, 90, 180, 270) dan Anda harus tahu posisi alami layar itu, di smartphone posisi alami akan menjadi potret dan di tablet, itu akan menjadi lanskap.
Inilah kodenya (metode kunci dan buka kunci), ini telah diuji di beberapa perangkat (ponsel cerdas dan tablet) dan berfungsi dengan baik.
sumber
Dalam Visual Studio Xamarin:
using Android.Content.PM;
untuk Anda daftar namespace aktivitas.[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
sebagai atribut untuk kelas Anda, seperti itu:
sumber
Menambahkan
ke manifes Anda.
sumber
Harap dicatat, tidak ada satupun metode yang tampaknya berfungsi sekarang!
Di Android Studio 1, satu cara sederhana adalah menambahkan
android:screenOrientation="nosensor"
.Ini secara efektif mengunci orientasi layar.
sumber