Как ссылаться на атрибут Android layout_width из пользовательского атрибута? - PullRequest
7 голосов
/ 16 января 2012

Я хочу разделить использование моего приложения на устройствах xlarge и использование на других устройствах, чтобы ограничить параметр layout_width 720dp для xlarge. Для этого я создаю values ​​/ attrs.xml :

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <attr name="layoutWidth" format="reference|dimension" />
</resources>

с пользовательским параметром layoutWidth, чтобы установить его в

android:layout_width="?layoutWidth"

Furtner, мне нужно указать два файла themes.xml для xlarge и обычных устройств в values-xlarge и values ​​ каталогах:

значения-XLarge / themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme" parent="android:Theme">
        <item name="layoutWidth">720dp</item>
    </style>
</resources>

Значения / themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme" parent="android:Theme">
        <item name="layoutWidth">What should I write here!?</item>
    </style>
</resources>

Итак, как я могу сделать ссылку на параметр Android "fill_parent" в этом месте? Вроде как @ android: layout_width / fill_parent , но у меня ошибка компиляции:

 No resource found that matches the given name (at 'layoutWidth' with value '@android:layout_width/fill_parent').

Ответы [ 4 ]

9 голосов
/ 18 января 2012

Я нашел решение, изменив values ​​/ attrs.xml на:

<?xml version="1.0" encoding="UTF-8"?>
<resources>    
    <attr name="layoutWidth" format="dimension">
        <enum name="fill_parent" value="-1" />
        <enum name="match_parent" value="-1" />
        <enum name="wrap_content" value="-2" />
    </attr>
</resources>

Теперь я могу написать в values ​​/ themes.xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme" parent="android:Theme"> 
        <item name="layoutWidth">match_parent</item>
    </style>
<resources>

Но вопрос все еще остается: можно ли ссылаться на параметр Android layout_width с этого места?

1 голос
/ 14 сентября 2015

Ну, это поздний ответ ... но, для потомков и здравомыслия, ответ можно найти ниже, а дополнительную информацию можно найти на http://developer.android.com/guide/topics/ui/themes.html

styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="YourStyle" parent="@android:style/TextAppearance.Medium">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>
</resources>

Это должно работать для любого родительского стиля, который использует android: layout_width, например parent = "@ android: style / Widget.TextView"

0 голосов
/ 25 июля 2017

Вы должны создать файл attrs.xml внутри папки значений и затем добавить в него следующий код:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="custom_match_parent" type="dimen">-1</item>
    <item name="custom_wrap_content" type="dimen">-2</item>
</resources>

Чтобы получить доступ к созданному выше файлу attrs.xml, добавьте нижеприведенную строку в ваш файл измерения.xml следующим образом:

<dimen name="max_layout_width">@dimen/custom_match_parent</dimen>

Теперь, чтобы получить доступ к этому из файла макета, вы должны сделать что-то вроде

<FrameLayout
    android:layout_width="@dimen/max_layout_width"
    android:layout_height="match_parent">
    <!--Do what you like to do here-->
</FrameLayout>

Надеюсь, это поможет! : -)

0 голосов
/ 10 октября 2012

Не уверен, что вы можете добавить этот атрибут где-нибудь в свои ресурсы или теги стиля, но это может помочь (если это разрешено законом)

XMLNS: андроид = "http://schemas.android.com/apk/res/android"

Указывает пространство имен, в котором определены layout_width и layout_height (а также константы fill_parent и wrap_content).

...