2011-11-18 15 views
14

Pracuję nad projektem Android, który ma być kompatybilny zarówno z telefonami i tabletami z Androidem. Na tablecie aplikacja działa świetnie i też wygląda dobrze. Jednak na telefonie pojawiały się problemy zarówno pod względem programowym, jak i pod względem układu (praca z ekranem 10,1 cala jest znacznie łatwiejsza niż ekran 4-calowy). Aby rozwiązać niektóre z tych problemów, zdecydowaliśmy się dezaktywować orientację ekranu, ale tylko dla wersji telefonu, przynajmniej tymczasowo.Jak zablokować orientację ekranu dla telefonu, ale nie dla tabletu? (Android)

Pytanie jest proste: jak wyłączyć orientację ekranu dla telefonu z Androidem, zachowując jego aktywność na tabletach z systemem Android? Wiem, że mogę to zrobić w pliku manifestu, jednak zablokuje to także orientację tabletu.

Odpowiedz

11

Możesz to zrobić również z aplikacji.

Lock screen orientation (Android)
http://developer.android.com/reference/android/app/Activity.html#setRequestedOrientation(int)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

i atrybutów można znaleźć tutaj:

http://developer.android.com/reference/android/R.attr.html#screenOrientation


Aby wykryć, czy urządzenie Android jest tablet lub telefon, należy użyć tego rozwiązania (różne SO Q & A), https://stackoverflow.com/a/9308284/492624

+1

Dlaczego ta odpowiedź jest ustawiony jako ważny? Nie wyjaśnia, jak ustawić inne zachowanie na telefonie i tablecie. –

2

Wygląda na to, że nie jest to niemożliwe, jeśli obsługujesz to w czasie wykonywania, przez uzyskanie rozmiaru ekranu, a następnie utworzenie RunTimeConfigurationChanges, To może ci pomóc.

Spróbuj tego Handling Runtime Changes.

i daj mi znać, jeśli uzyska sukces na niego ..

Dzięki.

+0

Zgadzam się z tobą, ale można to zrobić. Aby to zrobić: 1. Uzyskaj rozdzielczość ekranu urządzenia. 2. Zastąp metodę onConfigurationChanged w działaniu. –

1

Jedną z metod jest utworzenie osobnych działań dla wersji telefonu i wersji tabletu. A następnie ustal ich orientacje w pliku manifestu Android. Inną metodą jest sprawdzenie urządzenia, który jest aktualnie używany i jest ustalić orientację w samej działalności przy użyciu kodu,

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Tworzenie oddzielnych działań jest lepszy sposób, jak łatwo jest utrzymać wersje Tab i telefonicznych.

10

Przede wszystkim spróbuj temu zapobiec. Wybrałem to, ponieważ było to łatwe rozwiązanie złożonego problemu. Ale tak naprawdę, staraj się nie dopuścić do tego.

Jeśli naprawdę chcesz to zrobić, użyj następującego kodu.

W swojej działalności stworzyć metodę:

private boolean isTablet() { 
     return (this.getResources().getConfiguration().screenLayout 
      & Configuration.SCREENLAYOUT_SIZE_MASK) 
      >= Configuration.SCREENLAYOUT_SIZE_LARGE; 
    } 

a następnie w onCreate wykonaj następujące czynności:

if (!isTablet()) { 
     // stop screen rotation on phones because <explain> 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    }