纵向和横向Android应用程序

时间:2015-08-14 04:55:17

标签: android android-layout

我是android新手。我还在学习模式。我被要求开发一个应用程序,第一个要求是在手机上应用程序应该只是肖像和平板电脑应该只是风景。

我已经开发了普通默认文件夹布局的肖像模式应用程序,并在清单中我设置为android:screenOrientation =“portrait”

现在对于横向我认为如果我创建类似“layout-sw600dp-land”的文件夹将自动从此文件夹中为平板电脑调用xml,但随后在清单中提供了默认方向,因此它将始终为纵向。

所以现在的问题是如何实现手机(人像 - 风景不应该发生)和平板电脑(风景 - 肖像不应该发生)

我是否必须创建相同的Java&横向布局(XML)(清单中的设置)还是只有更改文件夹的简单方法?

3 个答案:

答案 0 :(得分:1)

好的,我要提出的解决方案可能不是完美的解决方案,但我确信它会起作用。

但它依赖于一个假设:

  • 平板电脑的屏幕必须大于手机的屏幕。

首先以像素为单位获取X和Y尺寸:

WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);

double width = size.x;
double height = size.y;

现在,您所要做的就是找到标准平板电脑的高度和宽度,如果它大于或等于普通平板电脑的高度和宽度,那么您将会这样做:

if(width > normalTabletWidth && height > normalTabletHeight){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}else{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

答案 1 :(得分:1)

你应该使用Android的getDisplay()...通常平板电脑有6.5或7英寸或更大的显示尺寸,手机的显示尺寸小于6.5英寸...所以比较显示属性,然后决定将屏幕模式更改为风景或肖像...

答案 2 :(得分:0)

我也面临着同样的问题,然后我找到了解决方案。

首先,您必须为平板电脑声明布局文件夹,例如:

layout-sw360dp/ : 720p screens 

layout-sw540dp/ : 1080p screens

然后,在这些文件夹中定义您的布局文件。但这无法解决人像和风景的问题。

为了使您的应用程序具有响应性,您还必须整理一些XML文件。

bool中放置一个res.values资源,以检查屏幕尺寸。

bool.xml (mobile)
 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="portrait_only">true</bool>
    <bool name="landscape_only">false</bool>
</resources>

// bool.xml (sw600dp)
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="portrait_only">false</bool>
    <bool name="landscape_only">true</bool>
</resources>

// bool.xml (sw720dp)
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool name="portrait_only">false</bool>
        <bool name="landscape_only">true</bool>
    </resources>

添加这些资源后,转到您的MainActivity.java文件及更高版本:

setContentView(R.layout.activity_main);

添加此支票:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // locking out landscape screen orientation for mobiles
        if(getResources().getBoolean(R.bool.portrait_only)){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
        // locking out portait screen orientation for tablets
        if(getResources().getBoolean(R.bool.landscape_only)){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        }

        setContentView(R.layout.activity_main);
}

要正确更改方向,应在清单中的活动标签中添加以下内容:

<activity 
    android:name="com.ABC"
    android:configChanges="keyboardHidden|orientation|screenSize">
</activity>

可以。