55

基于此处的 XML 属性部分,我在我的中指定以下内容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 属性。

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

更新:

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

<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>
4

6 回答 6

55

使用这个,它对我有用

<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

编辑:使用px而不是dpJarett Millard 在评论中建议的。

于 2013-09-27T06:19:54.707 回答
43

首先创建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>
于 2016-06-22T15:03:38.400 回答
27

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

不用在 dimen.xml 中定义宽度和高度,您可以在 styles.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。

我使用它是因为手机和平板电脑的布局是相同的,除了我想在平板电脑上固定宽度但在手机上填充父级,因此它不必使用基本相同的 xml 有 2 个不同的布局

于 2016-09-16T03:29:24.673 回答
10

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

<dimen name="my_match_parent">-1.0px</dimen>
于 2014-07-17T09:39:25.390 回答
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>
于 2017-12-08T12:51:31.850 回答
0

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

于 2013-05-10T09:39:57.840 回答