簡體   English   中英

如何鎖定某些屏幕尺寸的方向?

[英]how to lock orientation for some screen sizes?

我正在開發一個應用程序,該應用程序將在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進行擴展,因為大多數活動已經在擴展自定義偵聽器類

創建具有代碼的基本Activity類。 其他50個擴展它。

創建基本活動,這50個活動都將擴展。 將鎖定邏輯放在該基本活動的onResume()onCreate()中,然后將方向鎖定在那里。

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

始終創建“ 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擴展所有活動。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM