我的应用程序的UI设计是让一个活动主机托管多个片段,这些片段将根据用户从滑动菜单中单击的选项进行交换。我想在应用中只保留一个Activity
。 (请告诉我这是否是一个好的设计决定)。我找到了交换片段部分。
但是,我不知道如何根据方向更改片段的布局。例如,我的应用程序有这个片段,它以纵向模式显示项目列表。在横向,我希望它切换到网格视图。
活动可以根据方向改变布局,我知道这一点。碎片怎么样?
答案 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));
}