2

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

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

4

2 回答 2

1
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
}
于 2011-10-26T12:16:51.533 回答
0

您可以创建两个布局文件,并在 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 代码非常依赖于纵向,那就有点啰嗦了,但我想不出更好的解决方案 atm。

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

我希望这有帮助

于 2011-10-26T12:06:32.650 回答