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