如何从自定义属性中引用android属性layout_width?

时间:2012-01-16 14:50:21

标签: android layout attributes custom-attributes

我想将我的应用程序在xlarge设备上的使用和其他设备上的使用分开,以便为xlarge将layout_width参数限制为720dp。为此,我创建 values / attrs.xml

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

使用自定义参数layoutWidth将其设置为

android:layout_width="?layoutWidth"

Furtner,我需要在 values-xlarge values 目录中为xlarge和普通设备指定两个themes.xml文件:

值-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 个答案:

答案 0 :(得分:9)

我通过将 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 :(得分:1)

嗯,这是一个迟到的回复...但是,对于后代和理智,答案可以在下面找到,更多信息可以在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 =&#34; @android:style / Widget.TextView&#34;

答案 2 :(得分:0)

不确定您是否可以在资源或样式标记中的某处添加此属性,但它可能有所帮助(如果合法)

的xmlns:机器人= “http://schemas.android.com/apk/res/android”

这指定了定义layout_width和layout_height的命名空间(以及常量fill_parent和wrap_content)。

答案 3 :(得分:0)

您应该在values文件夹中创建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,请在dimens.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>

希望这有帮助! : - )