2013-12-09 59 views
0

我正在開發一款應用程序,它可以在4.7英寸以上的設備上運行,並且在縱向和橫向都可以運行。如何鎖定某些屏幕尺寸的方向?

現在的問題是,我有大約50左右的活動,如果設備屏幕尺寸爲小於等於5英寸,我想鎖定方向爲垂直。我可以使用下面的代碼設置方向鎖定: -

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 

上面的代碼,我可以用它來鎖定方位和下面的代碼顯示的指標: -

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 

現在我的問題是,什麼是適當的方法來鎖定設備的方向< = 5英寸,我必須在我的所有活動中編寫此代碼? 另外,我無法使用baseActivity進行擴展,因爲大多數活動已經在擴展自定義偵聽器類

回答

0

總是創建一個「BaseActivity」或「BaseFragmentActivity」以利用代碼可重用性和減少冗餘的最佳OOP實踐之一。限制清單中活動方向的標準方法。

但是,您必須根據條件進行限制,並且不想在每個活動中重新編寫。所以我建議創建「基本活動」,擴展到您的所有子活動。

public class BaseActivity extends Activity { 
    public void onCreate(Bundle savedState) { 
     //... 

     if(isScreenLarge()) { 
      // width > height, better to use Landscape 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     } else { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     } 
    } 

    public boolean isScreenLarge() { 
     final int screenSize = getResources().getConfiguration().screenLayout 
       & Configuration.SCREENLAYOUT_SIZE_MASK; 
     return screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE 
       || screenSize == Configuration.SCREENLAYOUT_SIZE_XLARGE; 
    } 
} 

現在擴展您的所有活動與BaseActivity

希望這會有所幫助。

+0

我無法擴展使用,因爲大部分活動已經在擴展自定義偵聽器類 –

+0

好的。然後你必須創建一個具有靜態方法的Util,該方法使用相關的參數{activity,...}來提供可重用性特性。但是你必須從每個活動中調用Util.setRequestedOrienation(activity,...)。我會說,它更像是設計架構問題,它總是會讓你陷入這種情況。 – Deminem

0

創建一個具有代碼的基本Activity類。另外50個擴展它。

0

創建基地活動你所有的50項活動延伸。將您的鎖定邏輯放在該基本活動的onResume()onCreate()中,並鎖定那裏的方向。

順便說一句:50個活動真的很多。試過碎片?

+0

這只是一個例子 - 50個活動或片段。主要問題是定位鎖 –