Domanda

Sto cercando di forzare il "ritratto" modalità per la mia applicazione, perché la mia domanda non è assolutamente progettato per la modalità "orizzontale".

Dopo la lettura di alcuni forum, ho aggiunto queste righe nel mio file manifest:

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

Ma non funziona sul mio dispositivo (HTC Desire).Si passa da "ritratto" lo "paesaggio", ignorando le righe del file manifesto.

Dopo più forum di lettura, ho provato ad aggiungere questo nel mio file manifest:

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

e questa funzione nella mia classe di attività:

public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Ma, di nuovo, senza fortuna.

È stato utile?

Soluzione

Non applicare l'orientamento al applicazione elemento, invece è necessario applicare l'attributo al attività elemento e devi anche impostare configChanges come notato di seguito.

Esempio:

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

Questo è applicato nel file manifest AndroidManifest.xml.

Altri suggerimenti

Notare che

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

viene aggiunto nel file manifest - dove è definita l'attività.

Penso android:screenOrientation="portrait" può essere utilizzato per le singole attività. Quindi usa quell'attributo in <activity> Tag come:

<activity android:name=".<Activity Name>"
    android:label="@string/app_name" 
    android:screenOrientation="portrait">
   ...         
</activity>

Se hai molta attività come la mia, nella tua applicazione o se non vuoi inserire il codice per ogni tag di attività in manifest, puoi farlo.

Nella classe di base delle applicazioni riceverai un callback del ciclo di vita

Quindi, fondamentalmente, cosa succede per ogni attività quando si crea il Crea di Crea nella classe Applicazione Attivazione qui è il codice ..

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) {

            }
        });
}

spero che questo aiuti.

Impostare forzare il ritratto o la modalità paesaggistica, Aggiungi linee rispettivamente.

Importare sotto la riga:

import android.content.pm.ActivityInfo;

Aggiungi la riga sotto appena sopra setContentView(R.layout.activity_main);

Per Ritratto:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//Set Portrait

Per Paesaggio:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//Set Landscape

Questo funzionerà sicuramente.

Secondo la documentazione di Android, dovresti anche includere anche screenSize come possibile modifica della configurazione.

android:configChanges="orientation|screenSize"

Se l'applicazione prende di mira il livello API 13 o superiore (come dichiarato dagli attributi Minsdkversion e TargetSdkversion), è necessario dichiarare anche la configurazione "screensze", poiché cambia anche quando un dispositivo passa tra ritratto e orientamenti del paesaggio.

Inoltre, se tutti includi il valore keyboardHidden Nei tuoi esempi, non dovresti quindi considerare anche locale, mcc, fontScale, keyboard e altri?..

Avevo questa linea nel mio 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">

In cui ho cambiato (appena aggiunto 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">

Questo ha risolto le cose per me.

Qualcosa da integrare: ho aggiornato un'app di recente, il precedente stava lavorando in modalità paesaggio e ritratto e voglio che la versione aggiornata dovrebbe funzionare in modalità ritratto, quindi ho aggiunto

android:screenOrientation="portrait"

all'attività corrispondente e si è schiantato quando ho testato l'aggiornamento. Poi ho aggiunto

android:configChanges="orientation|keyboardHidden"

anche e funziona.

Penso che tu voglia aggiungere android:configChanges="orientation|keyboardHidden" alla tua attività? Altrimenti l'attività viene riavviata sul cambio di configurazione. Il onConfigurationChanged non sarebbe chiamato allora, solo il onCreate

Se desideri supportare diversi orientamenti in debug e release build, scrivi così (vedi https://developer.android.com/studio/build/gradle-tips#share-properties-with-the-manifest).

In build.gradle del tuo app Cartella Scrivi:

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"]
        }
    }
}

Poi in AndroidManifest È possibile utilizzare questo "orientamento" variabile in qualsiasi Activity:

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

Puoi aggiungere android:configChanges:

manifestPlaceholders = [configChanges: "", orientation: "fullSensor"] in debug e manifestPlaceholders = [configChanges: "keyboardHidden|orientation|screenSize", orientation: "portrait"] in rilascio,

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

Risposta breve: Non farlo.

Ridisegnare la tua applicazione in modo che possa funzionare sia in modalità ritratto e paesaggio.Non c'è nessuna tale cosa come una UI che non possono essere progettati per lavorare sia in verticale che in orizzontale;solo pigro o privo di fantasia degli sviluppatori.

La ragione è piuttosto semplice.Vuoi che il tuo app, per essere fruibili da un pubblico il più vasto possibile, su un numero di dispositivi possibile.Forzando un particolare orientamento dello schermo, è possibile impedire l'esecuzione dell'app (usably) su dispositivi che non supportano tale orientamento e frustrare e allontanare i potenziali clienti che preferiscono un orientamento diverso.

Esempio:La progettazione dell'app per forzare la modalità ritratto.Un cliente scarica l'app su un 2-in-1 dispositivo che si utilizza prevalentemente in modalità orizzontale.
Conseguenza 1:L'app è inutilizzabile, o il vostro cliente è costretto a sganciare il loro dispositivo, ruotare, e utilizzare un orientamento che non è familiare o comodo per loro.
Conseguenza 2:Il cliente ottiene frustrato dalla tua app, camere non-design intuitivo e trova un'alternativa fossati, l'app interamente.

Io sto lottando con questo con un'app ora e come un consumatore e un developer, io la odio.Utile come app è fantastica le caratteristiche che offre, sono assolutamente d'odio le app perché mi costringe ad usare un orientamento che è contro ogni altro modo che io uso il mio dispositivo.

Non vuoi che i tuoi clienti ad odiare la tua app.


Lo so che non risponde direttamente alla domanda, quindi voglio spiegare in dettaglio in più per coloro che sono curiosi.

C'è una tendenza per gli sviluppatori per essere davvero bravo a scrivere codice e davvero terribile in fase di progettazione.A questa domanda, anche se suona come un codice domanda e l'asker certamente si sente come se fosse un codice domanda, è davvero una questione di design.

La domanda è "devo bloccare l'orientamento dello schermo nella mia app?" Il richiedente ha scelto di progettare l'interfaccia utente per la funzione e guardare bene solo in modalità portrait.Ho il sospetto che era per risparmiare tempo di sviluppo o perché l'applicazione del flusso di lavoro è particolarmente favorevole per un layout verticale (comuni di giochi per cellulare).Ma queste ragioni trascurare le reali importanti fattori che motivano corretta progettazione.

  1. Coinvolgimento del cliente - volete che i vostri clienti si sentono tirati in app, non spinto fuori di esso.L'app dovrebbe garantire il passaggio da ciò che il vostro cliente stava facendo prima di aprire l'app.(Questa è la ragione per la maggior parte delle piattaforme sono coerenti principi di progettazione, in modo che la maggior parte delle applicazioni di aspetto più o meno allo stesso modo se non hanno a.)

  2. La risposta del cliente - volete che i vostri clienti di reagire positivamente alla tua app.Essi dovrebbero godere di usarlo.Anche se si tratta di un libro paga app per il lavoro, dovrebbe essere un piacere per loro di aprire e orologio.L'applicazione deve salvare il vostro tempo i clienti e ridurre la frustrazione rispetto alle alternative.(Apps che infastidire gli utenti a costruire il risentimento contro la tua app che cresce in rancore contro il tuo brand).

  3. Di conversione del cliente - volete che i vostri clienti di essere in grado di spostare velocemente e facilmente, dalla navigazione all'interazione.Questo è l'obiettivo finale di qualsiasi app, per convertire impressioni in entrate.(Per le applicazioni che non generano entrate sono uno spreco di tempo per costruire, da una prospettiva di business.)

Un mal progettata UI riduce il coinvolgimento dei clienti e risposta che alla fine si traduce in un calo del fatturato.In un mobile-centric mondo (e in particolare sul tema del ritratto/paesaggio modalità di visualizzazione), questo spiega perché il responsive web design è un grande affare. Walmart Canada ha introdotto il design reattivo sul loro sito web nel mese di novembre 2013 e ha visto un 20% aumento di conversione del cliente. O'Neill Abbigliamento implementato responsive web design e i ricavi da clienti che utilizzano dispositivi iOS maggiore 101.25%, e 591.42% da clienti che utilizzano dispositivi Android.

C'è anche una tendenza per gli sviluppatori di concentrarsi intensamente su come implementare una soluzione particolare (come il blocco orientamento dello schermo), e la maggior parte degli sviluppatori su questo sito sarà troppo contento per aiutare a implementare tale soluzione, senza chiedersi se che è anche la migliore soluzione al problema.

Blocco orientamento dello schermo è la progettazione dell'interfaccia utente equivalente di attuazione di un ciclo do-while.Sei davvero sei sicuro di voler fare quel modo, o c'è un'alternativa migliore?

Non forzare l'app in un'unica modalità di visualizzazione.Investire il tempo e lo sforzo per renderlo reattivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top