Wymuś tryb orientacji "portretowej"

Próbuję wymusić tryb " portretowy "dla mojej aplikacji, ponieważ moja aplikacja absolutnie nie jest zaprojektowana do trybu" poziomego".

Po przeczytaniu niektórych forów, dodałem te linie w moim pliku manifestu:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:screenOrientation="portrait">

Ale nie działa na moim urządzeniu (HTC Desire). Przełącza się z" Portret " lo "krajobraz", ignorując linie z pliku manifestu.

Po przeczytaniu więcej forum, próbowałem dodać to w moim pliku manifest:

<application 
  android:debuggable="true"
  android:icon="@drawable/icon" 
  android:label="@string/app_name"
  android:configChanges="orientation"       
  android:screenOrientation="portrait">

I to funkcja w mojej klasie aktywności:

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Ale znowu bez powodzenia.
Author: Vertexwahn, 2011-02-03

11 answers

Nie stosuj orientacji do elementu application , zamiast tego powinieneś zastosować atrybut do elementu activity , a także ustawić configChanges Jak wspomniano poniżej.

Przykład:

<activity
   android:screenOrientation="portrait"
   android:configChanges="orientation|keyboardHidden">
</activity>

Jest to stosowane w pliku manifestu AndroidManifest.xml.

 542
Author: C0deAttack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 13:56:06

Zauważ, że

android:screenOrientation="portrait"     
android:configChanges="orientation|keyboardHidden"

Jest dodawany do pliku manifestu - gdzie aktywność jest zdefiniowana.

 24
Author: NULL pointer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-09 16:24:12

Jeśli masz wiele aktywności, takich jak moja, w aplikacji lub jeśli nie chcesz wprowadzać kodu dla każdego znacznika aktywności w manifeście, możesz to zrobić .

W podstawowej klasie aplikacji otrzymasz wywołanie zwrotne cyklu życia

Więc w zasadzie to, co dzieje się w każdej aktywności podczas tworzenia na create w klasie aplikacji get wyzwalane tutaj jest kod ..

public class MyApplication extends Application{

@Override
    public void onCreate() {
        super.onCreate();  

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                activity.setRequestedOrientation(
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


// for each activity this function is called and so it is set to portrait mode


            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
}
Mam nadzieję, że to pomoże.
 15
Author: Muneef M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-14 07:33:02

Myślę, że android:screenOrientation="portrait" może być używany do indywidualnych działań. Więc użyj tego atrybutu w znaczniku <activity>, np.:

<activity android:name=".<Activity Name>"
    android:label="@string/app_name" 
    android:screenOrientation="portrait">
   ...         
</activity>
 13
Author: Pinki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-22 09:41:09

Ustaw Wymuś tryb pionowy lub poziomy , Dodaj odpowiednio linie.

Import poniżej:

import android.content.pm.ActivityInfo;

Dodaj poniżej linię tuż nad setContentView(R.layout.activity_main);

Dla Portret :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait

Dla :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape
To na pewno zadziała.
 11
Author: Parth Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-31 04:14:32

Zgodnie z dokumentacją Androida, często należy również dołączyć screenSize jako możliwą zmianę konfiguracji.

android:configChanges="orientation|screenSize"

Jeśli Twoja aplikacja ma poziom API 13 lub wyższy (zgodnie z deklaracją atrybuty minSdkVersion i targetSdkVersion), wtedy należy również zadeklarować konfigurację "screenSize" , ponieważ zmienia się ona również wtedy, gdy urządzenie przełącza się między orientacją pionową i poziomą.

Również, jeśli wszystkie zawierają wartość keyboardHidden w swoich przykładach, nie powinieneś wtedy również rozważyć locale, mcc, fontScale, keyboard i inni..

 4
Author: Martynas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-29 10:38:44

Miałem tę linię na moim AndroidManifest.xml

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:label="@string/app_name" android:name="Project Name"
    android:theme="@android:style/Theme.Black.NoTitleBar">

Które zmieniłem na (właśnie dodałem android:screenOrientation="portrait")

<activity 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:label="@string/app_name" android:name="Project Name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Black.NoTitleBar">
To wszystko naprawiło.
 3
Author: Ian Jamieson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-17 09:50:47

Coś do uzupełnienia: niedawno zaktualizowałem aplikację, poprzednia działała zarówno w trybie poziomym, jak i pionowym, I chcę, aby zaktualizowana wersja działała w trybie pionowym, więc dodałem

android:screenOrientation="portrait"

Do odpowiedniej aktywności, i po prostu się zepsuł, gdy testowałem aktualizację. Potem dodałem

android:configChanges="orientation|keyboardHidden"
I to działa.
 2
Author: user2819453,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-22 10:26:57

Myślę, że chcesz dodać android:configChanges="orientation|keyboardHidden" do swojej działalności? W przeciwnym razie aktywność jest restartowana przy Config-change. onConfigurationChanged nie będzie wtedy wywoływana, tylko onCreate

 1
Author: Nanne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-03 11:43:51

Jeśli chcesz wspierać różne orientacje w debug i release Budach, napisz tak (zobacz https://developer.android.com/studio/build/gradle-tips#share-properties-with-the-manifest).

W build.gradle twojego app folderu napisz:

android {
    ...
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "fullSensor"]
        }
        release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // Creates a placeholder property to use in the manifest.
            manifestPlaceholders = [orientation: "portrait"]
        }
    }
}

Następnie w AndroidManifest możesz użyć tej zmiennej "orientacja" w dowolnym Activity:

<activity
    android:name=".LoginActivity"
    android:screenOrientation="${orientation}" />

Możesz dodać android:configChanges:

manifestPlaceholders = [configChanges: "", orientation: "fullSensor"] w debugowaniu i manifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"] w wydaniu,

<activity
    android:name=".LoginActivity"
    android:configChanges="${configChanges}"
    android:screenOrientation="${orientation}" />
 1
Author: CoolMind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-12 10:22:40

Krótka odpowiedź: nie rób tego.

Przeprojektuj aplikację tak, aby mogła działać zarówno w trybie pionowym, jak i poziomym. Nie ma czegoś takiego jak interfejs użytkownika, który nie może być zaprojektowany do pracy zarówno w portrecie, jak i w krajobrazie; tylko leniwi lub niewyobrażalni Programiści.

Powód jest dość prosty. Chcesz, aby Twoja aplikacja była dostępna dla jak największej liczby odbiorców na tak wielu różnych urządzeniach, jak to możliwe. Wymuszając określoną orientację ekranu, uniemożliwiasz działanie aplikacji (użytecznie) na urządzeniach, które nie obsługują tej orientacji, a Ty frustrujesz i zrażasz potencjalnych klientów, którzy preferują inną orientację.

Przykład: projektujesz aplikację tak, aby wymusiła tryb portretowy. Klient pobiera aplikację na urządzeniu 2 w 1, którego używa głównie w trybie poziomym.
konsekwencja 1: Twoja aplikacja jest bezużyteczna lub klient jest zmuszony do oddokowania urządzenia, obracania go i korzystania z niego w orientacji, która nie jest znana lub wygodna dla oni.
konsekwencja 2: klient jest sfrustrowany nieintuicyjnym projektem aplikacji i znajduje alternatywę lub całkowicie porzuca aplikację.

Walczę z tym za pomocą aplikacji i jako konsument i deweloper nienawidzę jej. Tak przydatna jak aplikacja jest, tak Fantastyczne, jak funkcje, które oferuje, absolutnie nienawidzę aplikacji, ponieważ zmusza mnie do korzystania z orientacji, która jest przeciwna do każdego innego sposobu, w jaki używam mojego urządzenia.

Nie chcesz, aby Twoi klienci nienawidzili Twoja aplikacja.


Wiem, że to nie odpowiada bezpośrednio na pytanie, więc chcę wyjaśnić to trochę bardziej szczegółowo dla tych, którzy są ciekawi.

Istnieje tendencja programistów do bycia naprawdę dobrymi w pisaniu kodu i naprawdę okropnymi w projektowaniu. To pytanie, choć brzmi jak pytanie kodowe, a pytający z pewnością czuje, że jest to pytanie kodowe, jest naprawdę pytaniem projektowym.

Pytanie naprawdę brzmi "Czy powinienem zablokować orientację ekranu w mojej aplikacji?"Asker zdecydował się zaprojektować interfejs użytkownika, aby działał i wyglądał dobrze tylko w trybie portretowym. Podejrzewam, że było to, aby zaoszczędzić czas rozwoju lub ponieważ przepływ pracy aplikacji jest szczególnie sprzyjający układ portretowy (wspólne dla gier mobilnych). Ale te powody zaniedbują wszystkie prawdziwe ważne czynniki, które motywują właściwy projekt.

  1. Zaangażowanie klientów-chcesz, aby Twoi klienci czuli się wciągnięci w Twoją aplikację, a nie wypchnięci z niej. Aplikacja powinna płynnie przejść od tego, co robił twój Klient przed otwarciem aplikacji. (To jest powód, dla którego większość platform ma spójne zasady projektowania, więc większość aplikacji wygląda mniej lub bardziej podobnie, choć nie muszą.)

  2. Customer response-chcesz, aby Twoi klienci pozytywnie reagowali na Twoją aplikację. Powinni z niego korzystać. Nawet jeśli jest to aplikacja płacowa do pracy, powinno być dla nich przyjemnością, aby ją otworzyć i włączyć. Aplikacja powinna zaoszczędzić czas klientów i zmniejszyć frustrację z powodu alternatyw. (Aplikacje denerwujące użytkowników budują niechęć do Twojej aplikacji, która przeradza się w niechęć do Twojej marki.)

  3. Konwersja klientów-chcesz, aby Twoi klienci mogli szybko i łatwo przejść od przeglądania do interakcji. Jest to ostateczny cel każdej aplikacji, aby przekształcić wrażenia w przychody. (Aplikacje, które nie generują przychodów, to strata czasu na tworzenie, z perspektywy biznesowej.)

Źle zaprojektowany interfejs użytkownika zmniejsza zaangażowanie i reakcję klientów, co ostatecznie skutkuje w niższych dochodach. W świecie mobilnym (szczególnie w temacie trybów wyświetlania pionowego/poziomego) wyjaśnia to, dlaczego responsywne projektowanie stron internetowych jest tak ważne. Walmart Canada wprowadził responsywny design na swojej stronie internetowej w listopadzie 2013 roku i zobaczył 20% wzrost konwersji klientów. Firma O ' Neill Clothing wdrożyła responsive web design i zwiększyły się przychody klientów korzystających z urządzeń z systemem iOS 101.25%, oraz 591.42% od klientów korzystających z Urządzenia z systemem Android .

Istnieje również tendencja programistów do skoncentrowania się na implementacji konkretnego rozwiązania (takiego jak blokowanie orientacji wyświetlacza), a większość programistów na tej stronie będzie zbyt zadowolona, aby pomóc we wdrożeniu tego rozwiązania, bez kwestionowania, czy jest to nawet najlepsze rozwiązanie problemu.

Blokowanie orientacji ekranu jest odpowiednikiem interfejsu użytkownika implementującego pętlę do-while. Czy naprawdę chcesz to zrobić? sposób, czy jest lepsza alternatywa?

Nie zmuszaj aplikacji do jednego trybu wyświetlania. Zainwestuj dodatkowy czas i wysiłek, aby była elastyczna.

 -13
Author: Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 20:47:13