我正在开发一个应用程序,该应用程序可以在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 :(得分:0)
创建一个包含代码的基类Activity类。另外50个延伸它。
答案 1 :(得分:0)
创建基本活动,扩展所有50个活动。将锁定逻辑放在该基本活动的onResume()
或onCreate()
中并锁定其方向。
答案 2 :(得分:0)
最好的OOP实践之一,始终创建“BaseActivity”或“BaseFragmentActivity”,以利用代码可重用性和减少冗余。限制清单中活动方向的标准方法。
但是你必须根据条件进行限制,也不想在每个活动中重写。所以我建议创建“基本活动”,扩展到所有子活动。
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
扩展您的所有活动。
希望这有帮助。