29

電話で画面を埋め、タブレットでポップアップ(ダイアログ)したいアクティビティがあります。

このようなレイアウトファイルを作ると思ったのですが、

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="@dimen/main_layout_width"
  android:layout_height="match_parent">

width の値を次のように外部化します。

values/dimens.xml で

<dimen name="tutorial_width">match_parent</dimen>

values-xlarge/dimens.xml で

<dimen name="tutorial_width">320dp</dimen>

しかし、「match_parent」を dimen 要素として表現することはできません。何か助けはありますか?ありがとう!

4

9 に答える 9

19

私が見つけた最良の方法: - 「match_parent」と「fill_parent」の代わりに「-1dp」と書く - 「wrap_content」の代わりに「-2dp」と書く

于 2012-03-09T09:10:01.477 に答える
12

この問題を解決するためにスタイルを使用しました。さまざまな画面サイズの android:layout_width アイテムを含む個別の xml スタイル要素を使用すると、文書化されていない -1dp を使用せずに問題が解決しました

于 2013-05-25T21:10:40.603 に答える
3

この大きな貢献によると: http://blog.danlew.net/2015/01/06/handling-android-resources-with-non-standard-formats/

  1. フォーマットなしで match_parent と wrap_content の両方を定義してみましょう:

    <item name="match_parent" type="dimen">-1</item>
    <item name="wrap_content" type="dimen">-2</item>
    
  2. 他のディメンション値でそれらを参照できます。

    <!-- Inside /res/values/dimens.xml -->
    <dimen name="responsive_width">@dimen/match_parent</dimen>
    
    <!-- Inside /res/values-sw800dp/dimens.xml -->
    <dimen name="responsive_width">800dp</dimen> 
    

詳細については、前述の Web ページを参照してください。

于 2016-05-25T15:10:52.067 に答える
3

私にとってうまくいくものとおそらく学問的な正しさを特徴とするものは次のようなものです:

<!-- In values/dimens.xml -->
<item name="width_match_unless_huge" type="dimen" format="integer">-1</item>

<!-- In values-sw600dp/dimens.xml -->
<item name="width_match_unless_huge" type="dimen" format="dimension">600dp</item>

これにより、現在の構成に応じて、dpMATCH_PARENTの具体的なサイズなどのサイズ変更動作定数を混在させることができます。

あなたは通常のようにそれを使用します<dimen/>

<LinearLayout
    android:layout_width="@dimen/width_match_unless_huge"
    .../>
于 2016-02-24T19:05:42.583 に答える
3

まだコメントできないので、新しい回答を書いています。プロジェクトで @pjanecze から提供された回答を使用しました。数日前に突然、いくつかのデバイスが奇妙なウィジェットの位置を報告し始めるまでは、すべて問題ありませんでした。非常に高密度のデバイスでは、寸法から match_parent を -1 として取得する代わりに (これは、レイアウト パラメーターで Android 定数 match_parent = -1 と同等でした)、-2 を取得していました。つまり、幅が wrap_content に設定されていました (-2 でlayout_parameters)。明らかに、-1dp は実行時にピクセルに変換され、-1dp は場合によっては -2px だったからです。

したがって、定数 -1dp および -2dp を使用する代わりに、match_parent および wrap_content に -1px および -2px を使用する必要があります。

于 2013-08-07T12:41:54.480 に答える
0

2つのレイアウトを作成できます。デフォルトでは「layout」ディレクトリにandroid:layout_height = "match_parent"があり、タブレットの場合は「layout-xlarge」ディレクトリにandroid:layout_height="320dp"があります。

于 2011-07-28T13:58:07.763 に答える
0

https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#MATCH_PARENT MATCH_PARENT = -1 および WRAP_CONTENT = -2で前述したように。値を Dimension リソースとして宣言する代わりに、整数リソースとして宣言して使用することに成功しました。したがって、この例を機能させるには、次の 2 つの整数リソース ファイルを使用できます。

値/整数.xml

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

値-sw600dp/integers.xml

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

レイアウトファイルは次のようになります。

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="@integer/tutorial_width"
  android:layout_height="match_parent">
于 2014-02-24T18:18:37.843 に答える