2013-02-24 17 views
5

Wiem, że można ograniczyć zmianę orientacji w pliku manifestu dla aplikacji Android, ale zastanawiałem się, czy jest sposób na zrobienie tego w zależności od typu/rozmiaru urządzenia.Zapobieganie zmianom orientacji Androida na niektórych urządzeniach

Chciałbym temu zapobiec na małych/średnich telefonach, ale pozwolić na to na dużych telefonach/tabletach.

Jaki jest najlepszy sposób, aby to osiągnąć? Każda pomoc byłaby bardzo cenna.

Odpowiedz

6

Do tego, myślę, że trzeba będzie zakasać dwie rzeczy w jednym.

  1. Najpierw Uzyskaj rozmiar ekranu urządzenia
  2. , a następnie w oparciu o wynik, włączyć lub wyłączyć orientację.

W pierwszej części

int screenSize = getResources().getConfiguration().screenLayout & 
     Configuration.SCREENLAYOUT_SIZE_MASK; 

switch(screenSize) { 
    case Configuration.SCREENLAYOUT_SIZE_LARGE: 
     Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show(); 
     break; 
    case Configuration.SCREENLAYOUT_SIZE_NORMAL: 
     Toast.makeText(this, "Normal screen",Toast.LENGTH_LONG).show(); 
     break; 
    case Configuration.SCREENLAYOUT_SIZE_SMALL: 
     Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show(); 
     break; 
    default: 
     Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show(); 
} 

kredytowe: https://stackoverflow.com/a/11252278/450534 (Roztwór był łatwo dostępny na SO)

I wreszcie, w zależności od wyniku powyższego kodu, czy z poniższych:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

LUB

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
+1

+1 za "Rozwiązanie było łatwo dostępne w SO" – Pragnani

+2

@Pagani: Wymagany kredyt tam, gdzie jest należny eh. Nie mogę twierdzić, co nie jest moje ;-) –

+0

Doceniam, że to rozwiązanie było łatwo dostępne w SO, ale nie mogłem go znaleźć przez tytuł pytania, ponieważ na tym etapie nie wiedziałem, że robienie tego programowo było jedynym sposobem. Miałem nadzieję, że wokół tego będzie jakaś konfiguracja. Dzięki i tak. – Zyga

1

Cóż, mogę się mylić, ale o ile wiem, nie ma na to bezpośredniego sposobu.

Należy sprawdzić programowo rozmiar ekranu i na tej podstawie zezwolić lub zabronić zmian orientacji.

if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
{  
    // screen is large.. allow orientation changes 
} 

else 
{ 
     //restrict orientation 
} 
0

można użyć podczas aktywności onCreate czeku, które urządzenie wielkości masz i wywołać metodę setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); (lub cokolwiek chcesz orientację dla tej wielkości).

Pamiętaj, że jeśli aktywność nie ma żądanej orientacji, zostanie ona zniszczona, a nowa zostanie utworzona.

0

sprawdzić rozmiar ekranu w kodzie i decydują się

setRequestedOrientation();

lub nie

0

Trzeba zastąpić public void onConfigurationChanged(Configuration newConfig) i stworzyć swoją własną logikę do sprawdzania gęstości i rozmiar ekranu.

Ale uwaga ... to nie jest dobra praktyka.

Powiązane problemy