Android: Orientierung ändern geändert

Ich muss eine Orientierungsänderung in meiner Anwendung erkennen, aber ich möchte nicht, dass mein Layout von Portrait zu Landschaft verändert wird. Derzeit bin ich mit der OrientationEventListener aber die Erkennung der Orientierung Winkel ist nicht genug. Ich möchte erkennen, dass der Benutzer von Porträt zu Landschaft oder umgekehrt geändert hat, und das ist nicht nur zu erkennen, ob der Orientierungswinkel 90 oder 270 ist.

Ich möchte die gleiche Erkennung, dass die Android zu ändern, die Aktivität orientiert werden. Ich habe versucht, onConfigurationChanged überschreiten und zu prüfen, ob orientantion Landschaft / Porträt ist, aber das ändert immer noch mein Aktivitätslayout in die Landschaft.

  • Eclipse & Android SDK Update wirklich buggy ab 12/07/2012
  • Live Streaming von Android App auf Youtube
  • Android SupportLib - FrameLayout in CoordinatorLayout mit AppBarLayout verbraucht ganze Bildschirmhöhe
  • Herausforderungen in RecyclerView von Android L
  • Wie kann ich Tensorflow mit reaktionsfähigem verwenden?
  • Minimaler Android-API-Level zum Ausführen von Google Maps Android API v2
  • Gibt es eine Möglichkeit, onConfigurationChanged zu verwenden, aber das Layout zu zwingen, im Porträt zu bleiben?
    Gibt es eine andere Möglichkeit, den Orientierungswechsel ohne OrientationEventListener zu erkennen. Letztendlich kann ich meine eigene Orientierung umwandeln, Algorithmus, irgendwelche Ideen dazu? Es muss etwas komplexer sein als if(90-THRESHOLD <= orientation <= 90+THRESHOLD) , ich möchte erkennen, ob der Benutzer die komplette Bewegung gemacht hat. Portrait-> Landschaft oder Landschaft-> Porträt.

    Danke für die Hilfe,
    Faltblatt

  • Warum erlaubt der Android-Klassenzimmer einen reflektierenden Zugriff auf das öffentliche Feld einer Paket-privaten Klasse aus einem anderen Paket?
  • Android - Hinzufügen mindestens einer Aktivität mit einem ACTION-VIEW Intent-Filter nach der Aktualisierung der SDK-Version 23
  • Wie ändere ich schwarze Hintergrundfarbe von Bitmap zu transparent?
  • Benutzerdefiniertes Symbol in der Android-Symbolleiste
  • Wie kann man erkennen, ob in den Vorlieben Änderungen vorgenommen wurden?
  • Erkennen Sie den Status von zwei SIM-Karten in einem Dual-SIM-Android-Telefon
  • 5 Solutions collect form web for “Android: Orientierung ändern geändert”

    Ok, nachdem ich versucht habe, die Android-API zu benutzen und nicht in der Lage zu sein, was ich brauche, habe ich meinen eigenen Algorithmus implementiert und eigentlich war es nicht so kompliziert: Ich habe einen OrientationEventListener verwendet und berechnet, wenn die Orientierung in den 4 Orientierungspunkten ( In meinem Code LANDSCAPE_RIGHT ich nur LANDSCAPE_RIGHT und PORTRAIT_UP :

     orientationListener = new OrientationEventListener(context, SensorManager.SENSOR_DELAY_UI) { public void onOrientationChanged(int orientation) { if(canShow(orientation)){ show(); } else if(canDismiss(orientation)){ dismiss(); } } }; @Override public void onResume(){ super.onResume(); orientationListener.enable(); } @Override public void onPause(){ super.onPause(); orientationListener.disable(); } private boolean isLandscape(int orientation){ return orientation >= (90 - THRESHOLD) && orientation <= (90 + THRESHOLD); } private boolean isPortrait(int orientation){ return (orientation >= (360 - THRESHOLD) && orientation <= 360) || (orientation >= 0 && orientation <= THRESHOLD); } public boolean canShow(int orientation){ return !visible && isLandscape(orientation); } public boolean canDismiss(int orientation){ return visible && !dismissing && isPortrait(orientation); } 

    Hallo schreiende Schnäppchen ist das, was du suchst?

     // Set background image, rotatable View view = getWindow().getDecorView(); int orientation = getResources().getConfiguration().orientation; if (Configuration.ORIENTATION_LANDSCAPE == orientation) { //Do SomeThing; // Landscape } else { //Do SomeThing; // Portrait } 

    Ich habe die folgende Klasse erstellt, um Orientierungsänderungen zu erkennen und meine Aktivität ursprüngliche Orientierung zu halten:

     public class SensorOrientationChangeNotifier { public final String TAG = getClass().getSimpleName(); private ArrayList<WeakReference<SensorOrientationChangeNotifier.Listener>> mListeners = new ArrayList<WeakReference<SensorOrientationChangeNotifier.Listener>>(3); private int mOrientation = 0; private SensorEventListener mSensorEventListener; private SensorManager mSensorManager; private static SensorOrientationChangeNotifier mInstance; public static SensorOrientationChangeNotifier getInstance() { if (mInstance == null) mInstance = new SensorOrientationChangeNotifier(); return mInstance; } private SensorOrientationChangeNotifier() { mSensorEventListener = new NotifierSensorEventListener(); Context applicationContext = GlobalData.getInstance().getContext(); mSensorManager = (SensorManager) applicationContext.getSystemService(Context.SENSOR_SERVICE); } /** * Call on activity reset() */ private void onResume() { mSensorManager.registerListener(mSensorEventListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); } /** * Call on activity onPause() */ private void onPause() { mSensorManager.unregisterListener(mSensorEventListener); } private class NotifierSensorEventListener implements SensorEventListener { @Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; int newOrientation = mOrientation; if (x < 5 && x > -5 && y > 5) newOrientation = 0; else if (x < -5 && y < 5 && y > -5) newOrientation = 90; else if (x < 5 && x > -5 && y < -5) newOrientation = 180; else if (x > 5 && y < 5 && y > -5) newOrientation = 270; //Log.e(TAG,"mOrientation="+mOrientation+" ["+event.values[0]+","+event.values[1]+","+event.values[2]+"]"); if (mOrientation != newOrientation){ mOrientation = newOrientation; notifyListeners(); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } } public int getOrientation() { return mOrientation; } public interface Listener { void onOrientationChange(int orientation); } public void addListener(SensorOrientationChangeNotifier.Listener listener) { if (get(listener) == null) // prevent duplications mListeners.add(new WeakReference<SensorOrientationChangeNotifier.Listener>(listener)); if (mListeners.size() == 1) { onResume(); // this is the first client } } public void remove(SensorOrientationChangeNotifier.Listener listener) { WeakReference<SensorOrientationChangeNotifier.Listener> listenerWR = get(listener); remove(listenerWR); } private void remove(WeakReference<SensorOrientationChangeNotifier.Listener> listenerWR) { if (listenerWR != null) mListeners.remove(listenerWR); if (mListeners.size() == 0) { onPause(); } } private WeakReference<SensorOrientationChangeNotifier.Listener> get(SensorOrientationChangeNotifier.Listener listener) { for (WeakReference<SensorOrientationChangeNotifier.Listener> existingListener : mListeners) if (existingListener.get() == listener) return existingListener; return null; } private void notifyListeners() { ArrayList<WeakReference<SensorOrientationChangeNotifier.Listener>> deadLiksArr = new ArrayList<WeakReference<SensorOrientationChangeNotifier.Listener>>(); for (WeakReference<SensorOrientationChangeNotifier.Listener> wr : mListeners) { if (wr.get() == null) deadLiksArr.add(wr); else wr.get().onOrientationChange(mOrientation); } // remove dead references for (WeakReference<SensorOrientationChangeNotifier.Listener> wr : deadLiksArr) { mListeners.remove(wr); } } public boolean isPortrait(){ return mOrientation == 0 || mOrientation == 180; } public boolean isLandscape(){ return !isPortrait(); } } 

    Benutze es wie folgt:

    In AndroidManifest.xml –

      <activity ... android:screenOrientation="portrait" > 

    In deiner Tätigkeit:

     public class MainActivity extends Activity implements SensorOrientationChangeNotifier.Listener { @Override protected void onResume() { super.onResume(); SensorOrientationChangeNotifier.getInstance().addListener(this); } @Override protected void onPause() { super.onPause(); SensorOrientationChangeNotifier.getInstance().remove(this); } @Override public void onOrientationChange(int orientation) { if (orientation == 90 || orientation == 270){ // Do some landscape stuff } else { // Do some portrait stuff } } } } 
      int orientation = getResources().getConfiguration().orientation; isPortrait = Configuration.ORIENTATION_PORTRAIT == orientation; 

    Um die Orientierung zu erkennen, werden wir die Aktivität bitten, uns mit der Breite und Höhe der Aktivität zu versorgen, so dass wir finden können, wenn Breite> Höhe, die "Landschaft" oder die entgegengesetzte Höhe> Breite sein wird, die "Porträt" ist – der folgende Code ist Getestet und arbeiten.

     @SuppressWarnings("deprecation") public void detectScreenOrientation(){ WindowManager wm = getWindowManager(); Display d = wm.getDefaultDisplay(); if (d.getWidth() > d.getHeight()){ Log.d("Orientation","Landscape mode"); } else { Log.d("Orientation", "Portrait mode"); } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.