Çalışma sırasında yönlendirmeyi kilitlemenin bir yolu var mı? Örneğin, kullanıcının ekranı şu anda manzaradayken ekranı yatay hale getirmesine ve menü seçeneğini değiştirmesine izin vermek istiyorum.Çalışma zamanı sırasında yönünü kilitleme
cevap
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Bir etkinlik çağrıldığında, onu yatay duruma getirecektir. ActivityInfo sınıfındaki diğer bayrakları arayın. Dikey olarak tekrar kilitleyebilir veya sensör/sürgü tahrikli hale getirebilirsiniz. Burada
diğer bilgiler: http://www.devx.com/wireless/Article/40792
Ben benzer bir durum var vardı gibiydi. Herhangi bir yönlendirmeyi desteklemek istedim, ancak iş akışında belirli bir noktadan sonra mevcut yönelimde kalmam gerekiyordu. korumalı iş akışının girişte
: My çözüm oldu korumalı iş akışının çıkışında
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Bu, en azından Android> = 16'da OQ'yu ele almaz. SetRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR), cihazı portre olsa bile manzaraya ayarlayabilirken, soru, verilen kilitleme yönelimini ifade eder. – greg7gkb
bana göre, nosensor ayarı yerine yatay moddayken portre moduna geri dönüyor ve bunun yerine SCREEN_ORIENTATION_LOCKED kullanmıştım ve benim için çalışmıştı – Jimmar
@JiMMaR SCREEN_ORIENTATION_LOCKED Android için en iyi yoldur> = 18 Ancak daha düşük bir hedefi hedefliyorsanız , Bu çalışmıyor. Jp36'nın cevabını aşağıda kullanmanızı öneriyorum. –
döner getConfiguration neyi arasındaki farkın dikkatli olun ve hangi setRequestedOrientation istiyor - ikisi de int, ama farklı sabit tanımlardan geliyorlar.
Burada 180 derecede sağlayan bu ters portre cihazlarda çalışır
int currentOrientation = getResources().getConfiguration().orientation;
if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
SCREEN_ORIENTATION_USER_LANDSCAPE'yi kullanmayı tercih edebilirsiniz, çünkü bu ayarlarda kullanıcı ekran rotasyonunu devre dışı bırakmışsa 180 derece döndürme yapmasına izin vermez. Benzer şekilde, serbest rotasyona geri dönülürken, SCREEN_ORIENTATION_USER, SCREEN_ORIENTATION_SENSOR değerinden daha iyidir; –
Parlak! Tersine döndürdüğünüzde, yeniden yapılandırma yapılmayacaksa, bunu eklemeniz gerekir. En azından test ettiğim cihazlarda. Bazı iletişim şovları vb. Sırasında yeniden yapılandırmayı durdurmak isteyip istemediğinizi bilmek gerçekten önemlidir. – sberezin
çevirir gelmesine karşın, mevcut yönünü kilitlemek ve peyzaj ters nasıl.
Kilit yönelim:
int orientation = getActivity().getRequestedOrientation(); int rotation = ((WindowManager) getActivity().getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation(); switch (rotation) { case Surface.ROTATION_0: orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; break; case Surface.ROTATION_90: orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; break; case Surface.ROTATION_180: orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; break; default: orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; break; } getActivity().setRequestedOrientation(orientation);
kilidini yönelim:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Dönüş döndürme "" Ekranın "doğal" yönelimini döndürür. "[Kaynak] (http://developer.android.com/ referans/robot/görünüşüdür/Display.html # getRotation()). ROTATION_0'ın portre olduğunu söyleyen bir telefon muhtemelen doğru, ancak bir tablette "doğal" yönelimi büyük olasılıkla yataydır ve ROTATION_0, portre yerine manzaraya dönmelidir. – jp36
@ jp36, Telefonla aynı doğal yönelime sahip Nexus 7'de test ettim. Daha büyük bir tablet üzerinde test ettiğiniz için teşekkür ederim. – pstoppani
jp36 dediği gibi, doğal peyzaj yönelimli tabletlerde çalışmaz! – DominicM
Alternatif, @pstoppani cevap olarak (tablet desteği ile bu iradeyi cevabı @pstoppani için sadece cihazlar üzerinde çalış> 2.2)
üzerinde test edilmiştirve İşte
public static void lockOrientation(Activity activity) {
Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int tempOrientation = activity.getResources().getConfiguration().orientation;
int orientation = 0;
switch(tempOrientation)
{
case Configuration.ORIENTATION_LANDSCAPE:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
break;
case Configuration.ORIENTATION_PORTRAIT:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270)
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
activity.setRequestedOrientation(orientation);
}
Samsung Galaxy Tab 10.1
benim kodudur, bu yöntemlerin ekran biriyle kilitlemek ve bir kez görevi bitmiş olabilir unlockOrientation ile kilidini:
/** Static methods related to device orientation. */
public class OrientationUtils {
private OrientationUtils() {}
/** Locks the device window in landscape mode. */
public static void lockOrientationLandscape(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
/** Locks the device window in portrait mode. */
public static void lockOrientationPortrait(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/** Locks the device window in actual screen mode. */
public static void lockOrientation(Activity activity) {
final int orientation = activity.getResources().getConfiguration().orientation;
final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
// Copied from Android docs, since we don't have these values in Froyo 2.2
int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
// Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO
if (!BuildVersionUtils.hasGingerbread()) {
SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90){
if (orientation == Configuration.ORIENTATION_PORTRAIT){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270)
{
if (orientation == Configuration.ORIENTATION_PORTRAIT){
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
}
/** Unlocks the device window in user defined screen mode. */
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
}
}
@pstoppani ait Xamarin dönüşüm Yukarıdaki cevap.
NOT: Bu bir Parça için Etkinliğini değiştirin. Bu, ile. Bir etkinlik içinde kullanılıyorsa.
public void LockRotation()
{
ScreenOrientation orientation;
var surfaceOrientation = Activity.WindowManager.DefaultDisplay.Rotation;
switch (surfaceOrientation) {
case SurfaceOrientation.Rotation0:
orientation = ScreenOrientation.Portrait;
break;
case SurfaceOrientation.Rotation90:
orientation = ScreenOrientation.Landscape;
break;
case SurfaceOrientation.Rotation180:
orientation = ScreenOrientation.ReversePortrait;
break;
default:
orientation = ScreenOrientation.ReverseLandscape;
break;
}
Activity.RequestedOrientation = orientation;
}
public void UnlockRotation()
{
Activity.RequestedOrientation = ScreenOrientation.Unspecified;
}
Bu daha önce kullanmış farklı bir yaklaşımla gitti, ama kullanım olabilecek test edilmedi.
Bu, pstoppani'ninkiyle aynı yanıttır ve bir tablette başarısız olur. –
- 1. Çalışma zamanı sırasında Konum simülatörünü ayarla Şehir/GPX Çalışma Zamanı
- 2. Çalışma zamanı sırasında protokol yöntemi nasıl tanımlanır?
- 3. Çalışma zamanı sırasında Uygulama Ayarlarını Değiştirme
- 4. LINQ: çalışma zamanı sırasında alt listelere erişme
- 5. Çalışma zamanı derlemesi sırasında belirsiz Referans hatası
- 6. kilitleme/portre benim yönünü kilitlemek için oryantasyon
- 7. NLog içinde çalışma zamanı sırasında günlük dosyaları ekleme/kaldırma
- 8. Mac OSX'te çalışma zamanı sırasında bir uygulamayı açın. Netbeans
- 9. Çalışma zamanı sırasında paylaşılan bir kütüphanede hata ayıklama/izleme?
- 10. WPF: Çalışma zamanı sırasında App.xaml'den Kaynaklar (renkler) değiştirme
- 11. Montaj çalışma zamanı bellek ayırma
- 12. Trimming Python Çalışma Zamanı
- 13. PHP çalışma zamanı önbellek
- 14. Java çalışma zamanı exec
- 15. Alma çalışma zamanı
- 16. çalışma zamanı WPF
- 17. WebPack 2 çalışma zamanı
- 18. WP7 (Windows Phone 7) Telefon yönünü XAML veya C'ye kilitleme #
- 19. Numba Çalışma Zamanı Bağlantı Hatası
- 20. Çalışma zamanı sırasında arayüzlerden beton türleri oluşturmak için Açık Kaynak Kütüphanesi?
- 21. Çalışma zamanı/derleme zamanı ve yığın/yığın hakkında açıklama
- 22. Servis Takvimi Toplu Çalışma zamanı
- 23. UISlider - çalışma zamanı özniteliği uyarısı
- 24. Çalışma zamanı hatası 9 VBA
- 25. PyInstaller Çalışma Zamanı Hatası? (R6034)
- 26. Çalışma zamanı genel türü belirlemesi
- 27. Autofac ile çalışma zamanı kaydı
- 28. VBA Çalışma zamanı hatası 3134
- 29. Python'da Çalışma Zamanı Hatası codeChef
- 30. OS X Yosemite çalışma zamanı
Teşekkürler. Bu harika çalışıyor. Geçerli yönlendirmeyi alacaktır. getResources(). GetConfiguration().yönlenme – Jared
Dikkat! GetConfiguration() öğesinin ne döndürdüğünü ve setRequestedOrientation öğesinin ne istediği arasında ayrım yapmalısınız. Ayrıntılar için aşağıdaki cevabı bakın: –
Bu yaklaşımla ilgili bir sorun var. [Bu yanıtı] (http://stackoverflow.com/a/3614089/1708390) –