Referencing another layout.xml file without duplicating it

后端 未结 3 846
余生分开走
余生分开走 2020-12-17 03:49

I need to provide the same layout.xml file for an Activity for several different qualifiers. I know that there\'s a way to just reference one existing layout.xml instead of

相关标签:
3条回答
  • 2020-12-17 04:26

    <include> see Layout tricks #2

    <merge> see Layout tricks #3

    0 讨论(0)
  • 2020-12-17 04:32

    Create a wrapper layout my_activity.xml and your layouts for small and xlarge devices.

    <merge>
        <include layout="@layout/my_activity_small.xml"/>
    </merge>
    

    Your resources should look like:

    layout
      -> my_activity.xml
      -> my_activity_small.xml
      -> my_activity_xlarge.xml
    

    Now override my_activity.xml in layout-xlarge and layout-sw600dp:

    <merge>
        <include layout="@layout/my_activity_xlarge.xml"/>
    </merge>
    

    Your ressources should look like:

    layout
      -> my_activity.xml           <-- includes my_activity_small.xml
      -> my_activity_small.xml
      -> my_activity_xlarge.xml
    layout-xlarge
      -> my_activity.xml           <-- includes my_activity_xlarge.xml
    layout-sw600dp
      -> my_activity.xml           <-- includes my_activity_xlarge.xml
    

    Use my_activity.xml in your code for loading the layout.

    P.S.: You can not point to a layout in another qualifier's directory, as you mentioned in one of the comments.

    0 讨论(0)
  • 2020-12-17 04:36

    If I understood correctly asker has one layout file for xlarge and sw-600dp and another one for all the rest. Anyway that was my situation when I stumbled on this question.

    One can solve this by creating folders layout-xlarge and layout-s600dp and put one layout file in each but with the same contents. But one would like not to have two exact same files in two folders for obvious reasons.

    This is my solution for the problem. Dont make layout-xlarge and layout-sw600dp files at all. Let's say you're creating a cool activity with layout file /res/layout/cool_activity.xml. Create your tablet layout file in the same folder but with a different name, i.e. /res/layout/cool_activity_for_tablet.xml and then create folders values-xlarge and values-sw600dp with layout.xml files in it with the following content

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <item name="cool_activity" type="layout">@layout/cool_activity_for_tablet</item>
    </resources>
    

    Yes you will still have 2 of these with the same content but this is dumb content not the layout itself which can be hundreds of lines of xml.

    0 讨论(0)
提交回复
热议问题