在横向和纵向上具有不同项目的Android布局

在横向和纵向上具有不同项目的Android布局,android,landscape,screen-orientation,portrait,Android,Landscape,Screen Orientation,Portrait,我在res/layout land和res/layout中有main.xml。有一个由12个图标组成的网格,3乘4(分别为宽度和高度)。如果用户旋转到横向,我希望在两页中以3乘2和3乘2的ViewPager显示它们。所以在res/layout中有一个由12项组成的网格,在res/layout区域中有一个ViewPager,我需要给它一个PagerAdapter 我的问题是:假设我正在使用configChanges=“orientation”,我该怎么做?或者更具体地说,例如,我在哪里为ViewP

我在res/layout land和res/layout中有main.xml。有一个由12个图标组成的网格,3乘4(分别为宽度和高度)。如果用户旋转到横向,我希望在两页中以3乘2和3乘2的ViewPager显示它们。所以在res/layout中有一个由12项组成的网格,在res/layout区域中有一个ViewPager,我需要给它一个PagerAdapter


我的问题是:假设我正在使用configChanges=“orientation”,我该怎么做?或者更具体地说,例如,我在哪里为ViewPager指定PagerAdapter?

您可以创建两个布局文件,并在onCreate()的开头(就在super.onCreate(bundle)行之后),在这一行周围放置一个if/else语句:

setContentView(R.layout.main);
看起来像这样:

if(orientation==LANDSCAPE)
    setContentView(R.layout.main_landscape);
else
    setContentView(R.layout.main_portrait);
从那时起,无论您的java代码在哪里不同,只要将其包装在相同的条件下即可。如果您的java代码非常依赖于纵向,这有点冗长,但我想不出更好的解决方案

此外,根据您的应用程序及其功能,您可能需要在方向更改时重新创建“活动”。但同样,这可能没有必要


我希望这有帮助

您可以在上面的if/else语句中提供视图寻呼机。尽管我建议您创建一个
res/values land/integer.xml
res/values port/integer.xml
,这将允许您在相同的布局xml中指定
而不是通过创建两个布局文件。那么你的意思是没有一种方法可以用res/layout land和res/layout来实现它?我们是否得出结论,这是唯一的实现方法?这看起来很混乱,对我来说,很难相信没有办法为每个布局文件夹指定完全不同的小部件。如果是这样,那么布局文件夹只是用于重新定位小部件,而不是替换屏幕中的一组不同的项目。我不想违背你的回答,但我真的想核实一下。
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if(display.getOrientation() == 0)
        setContentView(R.layout.main_portrait);
    else
        setContentView(R.layout.main_landscape); //getOrientation gives 1 here
}