2013-12-09 36 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个活动或片段。主要问题是定位锁 –