Autore Topic: Forzare portrait per smartphone e landscape per tablet  (Letto 922 volte)

Offline guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Forzare portrait per smartphone e landscape per tablet
« il: 03 Maggio 2013, 14:43:11 CEST »
0
Ciao a tutti!!!! :D
E' con vero piacere che, dopo circa un anno e mezzo di assenza dovuto a cambio lavoro, oggi torno su questo fantastico forum!
Oggi vorrei chiedere il vostro parere sulla strategia migliore da seguire per "forzare" la mia app ad essere visualizzata portrait su smartphone e landscape sui tablet. Tra l'altro la view dei tablet dovrà essere multi-pane, ma su questo ho visto che c'è del materiale a giro e quindi prima di chiedere mi studio un po' la cosa. Il discorso portrait/landscape fissato a priori invece non l'ho trovato nelle discussioni... come posso fare? Grazie mille!

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Forzare portrait per smartphone e landscape per tablet
« Risposta #1 il: 03 Maggio 2013, 14:46:17 CEST »
0
Sinceramente non so se esista una via per XML (direttamente dal layout)

Io da codice farei:

Codice (Java): [Seleziona]
public boolean controllaTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

Se ritorna vero imposti l'orientamento in landscape, altrimenti in portrait :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Forzare portrait per smartphone e landscape per tablet
« Risposta #2 il: 03 Maggio 2013, 16:00:04 CEST »
0
Sinceramente non so se esista una via per XML (direttamente dal layout)

Io da codice farei:

Codice (Java): [Seleziona]
public boolean controllaTablet(Context context) {
    return (context.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

Se ritorna vero imposti l'orientamento in landscape, altrimenti in portrait :)

Ciao rs94!! Grazie per la risposta! Ti dico come ho fatto.
Ho una classe commonUtilities.java in cui ho vari metodi di utilità.
Ho inserito il tuo metodo togliendogli il passaggio del context. Può andare bene l'implementazione qua sotto?
Come faccio a provarla con l'emulatore? C'è verso di rigirarlo una volta avviato per vedere se sta funzionando questo metodo?
Grazie!!!  ;-)

Codice: [Seleziona]
import android.content.Context;
import android.content.res.Configuration;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class commonUtilities {

        private Context context;

        /* Metodo per controllare se c'è disponibilità di connessione */

        public boolean isConnectionOn() {

                ConnectivityManager connMgr = (ConnectivityManager) context
                                .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
                if (networkInfo != null && networkInfo.isConnected()) {
                        return true;
                }
                return false;

        }

        /* Metodo per verificare se l'utente sta utilizzando un tablet */

        public boolean controllaTablet() {
                return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
        }

}


A questo punto, per ogni Activity della mia app, nell'override dell'onCreate() scriverei questo:

Codice: [Seleziona]
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {
       
        private commonUtilities utilities;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                //Imposto l'orientamento della Activity a seconda del dispositivo utilizzato
               
                if (utilities.controllaTablet())
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
               
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

}

Post unito: 03 Maggio 2013, 18:40:24 CEST
Ho risolto senza metodo... mettendo dentro gli onCreate() delle activity questo codice:

Codice: [Seleziona]
// Imposto l'orientamento landscape per i tablet e portrait per gli smartphone

                if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE) {
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
                } else {
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
                }

Grazie mille per il vostro aiuto!!!  ;-)
« Ultima modifica: 03 Maggio 2013, 18:40:24 CEST da guidocx84, Reason: Merged DoublePost »