在Android片段中检查方向更改的位置在哪里?

20
在我的应用程序中,我有一个包含多个碎片的“FragmentActivity”,除了特定的一个“Fragment”之外,所有碎片都是竖屏模式。我通过在“FragmentActivity”中的页脚“View”之间移动来切换“Fragment”。
当发生方向更改时,我有一个不同的布局(实际上具有相同的名称,但具有不同的小部件“View”)用于此特定的“Fragment”。在横向模式下,我想从“Fragment”布局“View”和“FragmentActivity”的页脚“View”中删除特定的小部件,“Fragment”与竖屏模式时则相反。
我已经在“onSavedInstanceState()”中保存了所有需要的数据,在哪里最好测试方向更改,以便我可以适当地还原“View”?
我不确定能否在我的“Fragment”中重写“onConfigurationChange()”并在那里测试,因为我在我的Android“Manifest”中没有android:configChanges =“orientation”
2个回答

39

在onCreate()方法中保留此检查。当您旋转设备时,应用程序将被重新启动。因此,在应用程序重新启动时,将再次调用onCreate()。

int currentOrientation = getResources().getConfiguration().orientation;
if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
   // Landscape
}
else {
   // Portrait  
}

4
你可以为竖屏和横屏视图创建单独的XML文件。在“res”文件夹中创建一个名为“layout-land”的文件夹,并在其中创建一个用于横屏视图的XML文件。保持两个XML文件(竖屏和横屏)的名称相同。你的视图将会自动调整。确保保留每个XML文件中的所有小部件(仅将不需要的小部件的可见性更改为“GONE”)。 - Vikram Gupta
非常感谢。但实际上,我从我的评论中意识到,我是指你的答案给了我其他的想法。我并不是真的把它当作一个问题,但很高兴它发生了,因为我忘记了使用视图可见性选项。 :) - irobotxx

20

您可以通过覆盖您的片段的 onConfigurationChanged 函数来控制方向更改。

    @Override
    public void onConfigurationChanged(Configuration newConfig) {

        super.onConfigurationChanged(newConfig);
        int currentOrientation = getResources().getConfiguration().orientation;

        if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE){
           Log.v("TAG","Landscape !!!");
        }
        else { 
           Log.v("TAG","Portrait !!!");
       }
   }

工作了!11111111111111111 - Debasish Ghosh
3
对我来说,它不被称为。 - ghita
似乎从主活动中运行而不是片段中。 - Wessam El Mahdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接