星期四, 7月 12, 2012

ViewFlipper Bug

因為有部分手機車架設計的關係,

有些車架電源接口朝左,有些朝右,

又因為Navier HUD是強制將畫面設定為Landscape
(android:screenOrientation ="landscape")

這時如果車架電源接口是朝左的話,

Navier HUD畫面會變成上下相反,

解決這個問題的方法,本來很單純,



就是把畫面設定改成 android:screenOrientation ="sensorLandscape" 就行了

問題是,sensorLandscape參數只支援Android2.3以上的版本,

2.3以下的版本會變成沒有將畫面鎖為橫向!


所以...我該為了這個參數放棄使用Android2.3以前版本的使用者嗎?

不,我一個使用者都不想放棄!
觀察Navier HUD的使用者版本分布,

仍有接近八分之一的使用者是Android2.3以前的版本

所以只好另外想辦法!

既然沒辦法在Manifest檔中使用參數,

那就直接在Activity的onResume()時,檢查手機的手持方向,

然後hardcode轉換顯示方向


public static void checkLanscapeOrientation(Activity context){
       Display display = ((WindowManager) context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getRotation();

try{
if(orientation==Surface.ROTATION_270)
{
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}else{
context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}catch(Exception e){
}
}


將上述方法放置於onResume()當中,來改編顯示方向

本以為應該沒有問題了!

無奈又碰上ViewFlipper 元件的Bug

當Activity當中有使用ViewFlipper時,做Orientation改變時,

可能會使App FC!

這個錯誤由Android2.1~ Android 4.0都還有,

Android 4.1似乎解決了,因為我手機刷了Android 4.1並且沒碰到這個問題,

所以我一直沒發現有問題,直到許多人在評論上提到,

我才知道ˊˋ


目前只好再把Orientation設回landscape,

對那些車架電源接口是朝左的使用者說聲抱歉@@

目前還無法解決此問題!

3 則留言:

DOHERTY 提到...

有辦法在設計一個鎖定螢幕顯示的方向嗎?

因為有時候反射在玻璃上

調整角度時,螢幕又會自動旋轉

在加上這個功能應該會更方便一些

Xunqun 提到...

目前在最新的版本中應該已經鎖定螢幕方向囉

DOHERTY 提到...

螢幕方向可以手動調整嗎
好像都只能顯示一邊而已