2015-05-06 14 views
11

Yani Slide Etkinlik geçişi kullanmaya çalışıyorum ama farklı bir yerçekimi ile kullanılarak, Gravity.START kullanılarak yapılan uygulama çöker bu:Android hata

getWindow().setExitTransition(new Slide(Gravity.START)); 

ve bu hatayı alıyorum:

IllegalArgumentException: Invalid slide direction

Ancak, kaynak koduna bakarsanız, yukarıdaki belirli kurucu, setSlideEdge() numaralı telefonu arar; bu durumda, yöntem daha önce belirttiğiniz Yerçekimini ayarlamak için bir anahtar deyiminden geçer:

switch (slideEdge) { 
     case Gravity.LEFT: 
      mSlideCalculator = sCalculateLeft; 
      break; 
     case Gravity.TOP: 
      mSlideCalculator = sCalculateTop; 
      break; 
     case Gravity.RIGHT: 
      mSlideCalculator = sCalculateRight; 
      break; 
     case Gravity.BOTTOM: 
      mSlideCalculator = sCalculateBottom; 
      break; 
     case Gravity.START: 
      mSlideCalculator = sCalculateStart; 
      break; 
     case Gravity.END: 
      mSlideCalculator = sCalculateEnd; 
      break; 
     default: 
      throw new IllegalArgumentException("Invalid slide direction"); 
    } 

Gravity.LEFT gayet güzel çalışıyor, ancak ben RTL destek istiyorum çünkü, sadece yerine Gravity.START kullanmak mantıklı. Bu anahtar deyiminde varsayılan durumun neden çalıştırıldığı konusunda kafam karıştı ve bunun tek açıklaması bu bir hatadır.

Bunu Google'a bildiririm ancak API hatalarını bu şekilde bildirmenin genel yolları yoktur ve bu durumda hata düzeltmek için tam olarak belirgin değildir. Yani, Slayt animasyonunu START'un Yerçekimi ile kullanmak isteyen herkese PSA.

+1

Aynı sorunu yaşıyorum. Geçişler Nexus 5 5.1'de iyi çalışır, ancak OnePlus One 5.0.2'de bir çökmeye neden olur. – EyesClear

+1

Slayt animasyonu api 21'de uyumlu değildir. 21'den büyük bir iştir. – Destro

+0

@Destro, "Slayt" yöntemine göre düzeltme yapmaz. setSlideEdge() 'sınıfı API 21'e eklenmiştir. – fahmy

cevap

11

Bu, API 21 aygıtlarında kilitlenen bir sorundur. Bunun nedeni, API 21'deki Slide'un ilk sürümünün yalnızca LEFT, TOP, RIGHT ve BOTTOM yerçekimlerini desteklemesidir. Bunu çözmenin

Slide source from API 21

Slide source from API 22

Tek

yolu Support Library dan GravityCompat kullanmaktır.

new Slide(GravityCompat.getAbsoluteGravity(GravityCompat.START, getResources().getConfiguration().getLayoutDirection())); 

getAbsoluteGravity() metod tercih ağırlık (START veya END) ve akım düzeni yönünde alır ve LEFT veya RIGHT geçerli yapılandırma için uygun olarak yerçekimi döndürür.

İlgili konular