ここでは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属性を指定する必要があります。
実際、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_content
を使用します(Graphical 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>
これを使用して、それは私のために働く
<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
を使用します。
最初に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>
@dimenでmatch_parent
を定義する理由に応じて、このユースケースが役立ちます。
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 fineを使用できます。必要に応じて、スタイルで以前に定義した@dimenも使用できます。
携帯電話とタブレットのレイアウトが同じであるため、私はこれを使用しますが、タブレットの幅を修正するが、電話の親を埋めたいので、基本的に同じxmlで2つの異なるレイアウトを持つ必要がありません
HTCデバイスの場合、これを使用してmatch_parentを実現します。
<dimen name="my_match_parent">-1.0px</dimen>
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>
そうは思いません。 @ dimen/match_parentは特定の単位の長さで、match_parentは特別なフラグです。