在我的应用程序中,我有多个 fragment 在多个 Activity 中使用。根据屏幕大小, Activity 使用不同的布局,在这些布局中,它们的 fragment 可以垂直和/或水平堆叠,平铺在具有行和列的表格布局中,或者在标签栏下几乎全屏显示。
对于每个 fragment ,也有多种布局,例如
res/
布局
/articles_list_fragment.xml
res/
layout-w590dp
/articles_list_fragment.xml
在我的 fragment 类中,我正在加载这样的布局:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
rootView = inflater.inflate(R.layout.articles_list_fragment, container, false);
// (...)
}
现在,当然,当 fragment 的可用宽度小于 590dp 时,我希望它使用第一个布局,而当 fragment 的可用宽度大于(或恰好)590dp 时,我想要要使用的第二个布局。
但是android资源系统似乎只根据宽度加载那些布局 that is available to my whole activity window .这不符合我的需要。例如,当我的 Activity 窗口为 1024dp 宽时,左侧 fragment 将获得该宽度的 2/5,即 409dp。无论如何,加载第二个布局资源,需要 590dp 宽度。
当然,在这个简单的示例中,我可以计算出我的左侧 fragment 达到 590dp 时的确切 Activity 窗口宽度:590dp * 5/2 = 1475dp
并因此重命名 res/
layout-w590dp
/articles_list_fragment.xml
到 res/
layout-w1475dp
/articles_list_fragment.xml
。然而,在我的真实案例中, Activity 窗口宽度和 fragment 宽度之间的关系要复杂得多,静态/手动确定最小宽度似乎不合适。
所以现在我想知道是否有任何类型的设置/hack/库/限定符语法可以用来改变 android 确定它加载的资源的方式。
最佳答案
我有一个类似的问题,给人的印象是 Android 故意要强制开发人员为每个屏幕尺寸设计全屏布局(包括所有 fragment ),而不是根据 fragment 大小来布局 fragment 。
最后我决定通过不为不同大小的地方重复使用相同的 fragment 来解决这个问题。相反,我继承了我的 fragment ,覆盖了 onCreateView 方法,这样我就可以为不同的子 fragment 扩展不同的布局。
不幸的是,这导致了布局的重复。为了避免这种情况,可以采取变通方法将所有布局直接放在布局文件夹下,并以编程方式确定屏幕尺寸之外的正确布局版本。
关于android - 根据 fragment 宽度而不是屏幕宽度加载布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459641/