Geçerli ekran yönünü nasıl alabilirim?


190

Ben sadece benim yönelimi manzara olduğunda bazı bayraklar ayarlamak istiyorum böylece etkinlik onCreate () yeniden oluşturulduğunda ben portre veya manzara yük ne arasında geçiş yapabilirsiniz. Zaten düzenimi işleyen bir düzen-kara xml var.

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

Overfig üzerinde onConfigurationChanged düzeni, land-land xml dosyamın yatay yönde yüklenmesini engeller.

Sadece cihazımın geçerli yönünü onCreate () 'de almak istiyorum. Bunu nasıl alabilirim?

Yanıtlar:


475
Activity.getResources().getConfiguration().orientation

8
Bu yalnızca iki ORIENTATION_PORTRAIT ve ORIENTATION_LANDSCAPE değerini sağlar. ActivityInfo'dan dört değerin tümünü almanın bir yolu var mı? (Bu da LANDSCAPE_REVERSE ve PORTRAIT_REVERSE'dir)
HRJ

18
@HRJ getWindowManager () kullanabilirsiniz. GetDefaultDisplay (). GetRotation ()
MKJParekh

24
getWindowManager (). getDefaultDisplay (). getRotation (), döndürmeyi ekranın "doğal" yönüne göre döndürür, yani bir tablet için yatay modda Surface.ROTATION_0 değerini döndürür, cep telefonu için ise aynı değeri döndürür Vesika.
Zoltán

65
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

Ne zaman üst sınıf thisDİRContext


28

Bazı cihazlarda void onConfigurationChanged()çökebilir. Kullanıcı geçerli ekran yönünü almak için bu kodu kullanır.

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

Ve kullan

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

1
Lütfen getOrient.getWidth () ve getOrient.getHeight () yöntemlerinin kullanımdan kaldırıldığını unutmayın.
valerybodak

Daha ayrıntılı olduğu gibi doğru cevap olarak işaretlenmelidir
Zapnologica

1
Doğru cevap olarak işaretlenmeli ve her koşulda en iyi şekilde çalışmalıdır. Ancak, anivaler getActivity (). GetWindowManager (). GetDefaultDisplay (). GetWidth () ve getHeight () artık kullanılmadığını söyledi. Lütfen getSize (Point exsize) kullanın. Yeni nokta nesnesi geçirme olarak kullanılabilir ve bu onun x ve y üyelerini alır.
Mahendra Chhimwal

Point OutSize = new point () gibi; getOrient.getSize (outSize); (outSize.x == outSize.y) KARE döndürürse;
Mahendra Chhimwal

Configuration.ORIENTATION_SQUARE öğesinin kullanımdan kaldırıldığını ve 2013'te 0 olarak tanımlanmış olsa da, 3 olarak tanımlanırken Configuration.ORIENTIATION_UNDEFINED değeri 0 olarak tanımlanır.
Dave,

26
int rotation =  getWindowManager().getDefaultDisplay().getRotation();

bu normal ve ters gibi tüm yönleri verir

ve onun gibi idare et

int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}

final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
Andrey Syrokomskiy

12
getActivity().getResources().getConfiguration().orientation

bu komut Dikey için int değerini 1 ve Yatay için 2 değerini döndürür


4

Durumda herkes elde etmek istiyorum anlamlı (yani iletilen gibi yönlendirme açıklama onConfigurationChanged(..)olanlar ile reverseLandscape, sensorLandscapeve benzeri), sadece araç kullanımıgetRequestedOrientation()


1

Etkinlik sınıfınızda aşağıdaki yöntemi kullanın:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

Ardından, etkinliğinizin bir yapılandırma değişikliği gerçekleştirdiğini beyan etmek için, bildirim dosyanızda uygun öğeyi, android:configChangesişlemek istediğiniz yapılandırmayı temsil eden bir değere sahip olacak şekilde düzenleyin. android:configChangesÖznitelik belgelerinde olası değerler listelenmiştir (en çok kullanılan değerler, ekran yönü değiştiğinde yeniden başlatmayı önlemek için "yönelim" ve klavye kullanılabilirliği değiştiğinde yeniden başlamayı önlemek için "keyboardHidden" dır). Bir boru ile ayırarak öznitelikte birden çok yapılandırma değeri bildirebilirsiniz | karakter.

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

Bu kadar!!


0

bu onConfigurationChanged yöntemini geçersiz kılmak ve yine de temel şeyleri yapmak istiyorsanız, overriden yöntemindeki ilk ifade olarak super.onConfigyrationChanged () yöntemini kullanmayı düşünün.


0

Sadece bazılarınızla ilgili başka bir alternatif öneriyorum:

android:configChanges="orientation|keyboardHidden" 

enjekte edilecek düzeni açıkça beyan ettiğimizi ima eder.

Düzenli arazi ve düzen klasörleri sayesinde otomatik enjeksiyonu korumak istiyorsak. Tek yapmanız gereken onCreate'a eklemektir:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

Burada, telefonun yönüne bağlı olarak eylem çubuğunu görüntülüyor veya görüntülemiyoruz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.