根据片段宽度而不是屏幕宽度加载布局

时间:2014-03-17 16:16:28

标签: android android-layout android-resources

在我的应用中,我有多个片段在几个活动中使用。根据屏幕大小,活动使用不同的布局,其中的片段可以垂直和/或水平堆叠,平铺在表格中,如行和列布局,或在标签栏下显示几乎全屏。

对于每个片段,还有多个布局,例如

  1. res/ layout /articles_list_fragment.xml
  2. res/ layout-w590dp /articles_list_fragment.xml
  3. 在我的片段类中,我按如下方式加载布局:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        rootView = inflater.inflate(R.layout.articles_list_fragment, container, false);
        // (...)
    }
    

    现在,当然,当片段的宽度小于590dp时,我希望它使用第一个布局,当片段的宽度超过(或者完全)590dp时,我想要使​​用第二种布局。

    但是android资源系统似乎只根据宽度加载那些布局 that is available to my whole activity window。这不符合我的需要。例如,当我的活动窗口宽度为1024dp时,左侧片段将获得该宽度的2/5,这将产生409dp。无论如何,第二个布局资源被加载,需要590dp的宽度。

    当然,在这个简单的示例中,我可以计算左侧片段达到590dp的精确活动窗口宽度:590dp * 5 / 2 = 1475dp,从而重命名res/ layout-w590dp /articles_list_fragment.xmlres/ layout-w1475dp /articles_list_fragment.xml。但是,在我的实际情况中,活动窗口宽度和片段宽度之间的关系要复杂得多,并且静态/手动确定最小宽度似乎不合适。

    所以现在我想知道是否有任何类型的设置/ hack / library / qualifier语法可以用来改变android确定它加载的资源的方式。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并且给人的印象是Android有意强迫开发人员为每个屏幕尺寸设计全屏布局(包括所有片段),而不是根据片段大小布局片段。

最后,我决定通过不为不同大小的地方重复使用相同的片段来解决这个问题。相反,我是我的片段的子类,重写了onCreateView方法,这样我就可以为不同的子片段扩展不同的布局。

不幸的是,这导致了布局的重复。为了避免这种情况,可以采用解决方法将所有布局直接放在布局文件夹下,并以编程方式从屏幕尺寸中确定正确的布局版本。

相关问题