[英]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.