2015-02-18 9 views

cevap

8

Bildirimin kendisinde bulunan geri dönüş mekanizmasının uygulanmasının bir yolu olduğunu sanmıyorum.

Bildiride {userLandscape, sensorLandscape, landscape} öğelerinden birini belirtmenizi öneririm. Ardından, çalışma zamanında sürümü kontrol edin ve doğaçlama yapın. Belirtide, android:screenOrientation="userLandscape" ile birlikte çalışmaya karar verdiniz. Gelen

içeriği ayarlamadan önce Etkinliğin onCreate(Bundle),: Birisi bundan daha iyi bir çözüm ile geliyor

int sdkInt = Build.VERSION.SDK_INT; 

// if we're running on some API level within [9, 18), use `sensorLandscape` 
if (sdkInt >= Build.VERSION_CODES.GINGERBREAD /* 9 */ 
     && sdkInt < Build.VERSION_CODES.JELLY_BEAN_MR2 /* 18 */) { 
    setRequestedOrientation(
      ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
} else if (sdkInt < Build.VERSION_CODES.GINGERBREAD /* 9 */) { 
    setRequestedOrientation(
      ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 

// API 18 or above - handled in manifest 

setContentView(R.layout.whatever); 

Umut. Bu kaba kuvvet gibi görünüyor.

Düzenleme

:

farklı bir yaklaşım çalıştı - Biliyorum kadarıyla, çeteleler böyle userLandscape olarak, sensorLandscape vb değerlerini değiştirmez (ve burada yanlış olabilir). şu anda dururken:

<!-- `0` for `landscape` -- defined in values/integers.xml --> 
<integer name="customScreenOrientation">0</integer> 

<!-- `6` for `sensorLandscape` -- defined in values-v9/integers.xml --> 
<integer name="customScreenOrientation">6</integer> 

<!-- `11` for `userLandscape` -- defined in values-v18/integers.xml --> 
<integer name="customScreenOrientation">11</integer> 

Ardından etkinliğin etiketinde android:screenOrientation değeri olarak @integer/customScreenOrientation kullanabilirsiniz: Eğer olsaydı

<attr name="screenOrientation"> 
    <enum name="unspecified" value="-1" /> 
    <enum name="landscape" value="0" /> 
    <enum name="portrait" value="1" /> 
    <enum name="user" value="2" /> 
    <enum name="behind" value="3" /> 
    <enum name="sensor" value="4" /> 
    <enum name="nosensor" value="5" /> 
    <enum name="sensorLandscape" value="6" /> 
    <enum name="sensorPortrait" value="7" /> 
    <enum name="reverseLandscape" value="8" /> 
    <enum name="reversePortrait" value="9" /> 
    <enum name="fullSensor" value="10" /> 
    <enum name="userLandscape" value="11" /> 
    <enum name="userPortrait" value="12" /> 
    <enum name="fullUser" value="13" /> 
    <enum name="locked" value="14" /> 
</attr> 

Yani, bir integer gibi tanımlamak için.

En iyi şekilde bir kesmek olduğunu söylemeye gerek yok. Birisi, screenOrientation için enum değerlerinin sabit durumunu doğrulayabilirse, bu geçerli bir çözüm olabilir - birden çok etkinlikte daha önceki öneriden kod eklemeyi tercih edebilir.

Henüz başka düzenleme: Daha önce bahsettiğim İkinci yaklaşım üzerine geliştirilebilir

: Yerine birden integers.xml dosyaların

, 3 styles.xml dosyaları oluşturmak. Sanırım zaten bir tane var - values/styles.xml. values-v9/styles.xml & values-v18/styles.xml oluşturun.üzerinde

<activity 
    .... 
    android:theme="@style/AppTheme" 
    android:screenOrientation="@integer/customScreenOrientation"/> 

Bu yaklaşımın avantajı:

<integer name="customScreenOrientation">?android:attr/screenOrientation</integer> 

Etkinlik etiketi gibi görünecektir:

<!-- values/styles.xml --> 
<style name="AppTheme" parent="@style/BaseTheme"> 
    <item name="android:screenOrientation">landscape</item> 
</style> 

<!-- values-v9/styles.xml --> 
<style name="AppTheme" parent="@style/BaseTheme"> 
    <item name="android:screenOrientation">sensorLandscape</item> 
</style> 

<!-- values-v18/styles.xml --> 
<style name="AppTheme" parent="@style/BaseTheme"> 
    <item name="android:screenOrientation">userLandscape</item> 
</style> 

Bunu takiben, bir tamsayı customScreenOrientationvalues/integers.xml (bir dosya) oluşturmak ve tanımlamak İkincisi, enumları kodlanmış değerler yerine kullanmamızdır. Yine, bu iki yaklaşım, enum değerleri taşa ayarlanırsa denktir. Eğer değişirlerse, üçüncü yaklaşım devam ederken ikinci yaklaşım başarısız olur.

+0

Bu çalışır. Daha zarif bir çözüm görmek isterdim, ama belki de bir tane yok. – Tenfour04

+0

@ Tenfour04 Biraz daha bununla uğraşıyordum ve başka bir geçici çözüm buldum - bu benim görüşüme göre zarif değil, ancak daha az kod içeren bir çözüm sunuyor. – Vikram

+0

@ Tenfour04 Yedekleme mekanizmasını uygularken başka bir (son umudum) yolu ekledim. – Vikram

İlgili konular