Can Fargments可以根据方向改变他们的布局吗?

时间:2014-03-08 06:15:20

标签: android android-fragments

我的应用程序的UI设计是让一个活动主机托管多个片段,这些片段将根据用户从滑动菜单中单击的选项进行交换。我想在应用中只保留一个Activity。 (请告诉我这是否是一个好的设计决定)。我找到了交换片段部分。

但是,我不知道如何根据方向更改片段的布局。例如,我的应用程序有这个片段,它以纵向模式显示项目列表。在横向,我希望它切换到网格视图。

活动可以根据方向改变布局,我知道这一点。碎片怎么样?

2 个答案:

答案 0 :(得分:2)

当我们使用Android中的活动时,为不同的屏幕方向定义不同的布局很容易。我们唯一需要做的就是在两个单独的目录(res / layout /和res / layout-land /)中为布局创建两个* .xml文件。在片段中,它并不那么容易。在这种情况下,我们需要执行额外的操作才能实现我们的目标。 Android中的片段不会在配置更改时重新膨胀,但我们可以手动重新创建布局和重新填充视图。 我们需要以与Activity相同的方式为屏幕的不同方向创建两个布局:

RES /布局/ my_fragment.xml RES /布局土地/ my_fragment.xml 然后,我们需要将下面显示的代码放到我们的片段中。 当然,根据具体项目,它几乎不需要调整。

答案 1 :(得分:0)

public void onConfigurationChanged (Configuration newConfig)  
  

当设备配置发生变化时由系统调用   组件正在运行。请注意,与活动不同,其他组件   在配置更改时永远不会重新启动:它们必须始终   处理更改的结果,例如通过重新检索   资源。

     

在调用此函数时,您的Resources对象   将更新以返回与新匹配的资源值   组态。

覆盖Fragment的上述方法可能有助于动态更改视图。例如,如下所示:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
    RelativeLayout rl = (RelativeLayout) findViewById(R.id.about);
    rl.removeAllViews();
    rl.addView(View.inflate(myView.getContext(), R.layout.about, null));
}  

取自:Android - How to dynamically change fragment layout