在dimens.xml中,value等于match_parent或fill_parent?

时间:2013-05-10 09:12:53

标签: android xml android-layout android-resources dimension

根据here on XML Attributes部分,我在dimens.xml中指定了以下内容:

<dimen name="match_parent">-1dp</dimen>
<dimen name="main_left_menu_user_account_width">@dimen/match_parent</dimen>
<dimen name="main_left_menu_user_account_height">@dimen/match_parent</dimen>

然后我在布局中使用这两个维度:

<ImageView 
    android:id="@+id/userAccountImage"
    android:background="@drawable/user_account"
    android:layout_width="@dimen/main_left_menu_user_account_width"
    android:layout_height="@dimen/main_left_menu_user_account_height" />

然后,当我预览到Graphical Layout时,它会抱怨:

  

您必须提供layout_width属性。

     

您必须提供layout_height属性。

实际上我可以在dimens.xml中定义一个等于match_parent的值吗?

更新

我也试过了,但预览仍然抱怨:

<dimen name="main_left_menu_user_account_width">-1dp</dimen>
<dimen name="main_left_menu_user_account_height">-1dp</dimen>

我成功使用wrap_contentGraphical Layout根本不抱怨):

<dimen name="wrap_content">-2dp</dimen>

<dimen name="main_right_menu_width">@dimen/wrap_content</dimen>
<dimen name="main_right_menu_height">@dimen/wrap_content</dimen>

6 个答案:

答案 0 :(得分:40)

使用它,它适用于我

<dimen name="custom_wrap_content">-2px</dimen>  
<dimen name="horizontal_border_height">@dimen /custom_wrap_content</dimen>

<dimen name="custom_match_parent">-1px</dimen>  
<dimen name="vertical_border_height">@dimen /custom_match_parent</dimen>

match_parent未运行的原因。 您无法提供match_parent

等关键字的内置版本

修改:根据评论中Jarett Millard的建议,使用px代替dp

答案 1 :(得分:38)

首先创建attribs.xml:

<resources>
    <item name="match_parent" type="dimen">-1</item>
    <item name="wrap_content" type="dimen">-2</item>
</resources>

第二次使用你的尺寸:

   <dimen name="account_width">@dimen/match_parent</dimen>
   <dimen name="account_height">@dimen/wrap_content</dimen>

答案 2 :(得分:22)

根据您在@dimen中定义match_parent的原因,此用例可以帮助您:

您可以在styles.xml中将其定义为样式,而不是在dimen.xml中定义宽度和高度

我用

//res/values/styles.xml
<style name="IntroLayout">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>

//res/values-sw600dp/styles.xml
<style name="IntroLayout">
    <item name="android:layout_width">520dp</item>
    <item name="android:layout_height">wrap_content</item>
</style>

并像

一样使用它
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:layout_gravity="center"
                style="@style/IntroLayout">

允许我动态设置不同大小的设备的宽度和高度属性,而无需编写任何代码,您可以使用match_parent / wrap_content。如果需要,您也可以使用之前在样式中定义的任何@dimen。

我使用这个是因为手机和平板电脑的布局是相同的,除了我想在平板电脑上修复宽度但在手机上填充父母,所以它节省了必须有2个不同的布局与基本相同的xml

答案 3 :(得分:10)

对于HTC设备,使用它来实现match_parent:

<dimen name="my_match_parent">-1.0px</dimen>

答案 4 :(得分:1)

您也可以使用integers.xml文件

来实现此目的

integers.xml档案:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="match_parent">-1</integer>
    <integer name="wrap_content">-2</integer>
</resources>

dimens.xml中使用:

<dimen name="main_right_menu_width">@integer/wrap_content</dimen>

您可能还会收到lint警告,以禁止它使用:

<dimen name="main_right_menu_width" tools:ignore="ReferenceType">@integer/wrap_content</dimen>

答案 5 :(得分:0)

我不这么认为。 @ dimen / match_parent是一个具有单位的特定长度,而match_parent是一个特殊的标志。