36

パーセンテージでマージンを設定したい..リニアレイアウトに4つのイメージビューがあり、各画面サイズで同じパーセンテージを維持するデフォルトの左、右、上、下のマージンを設定したい。

出来ますか ?

ここに私が欲しいデモがあります.. ここに画像の説明を入力

そして、これが私が試したもので、うまくいかないものです

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="10" >

        <Thumbnail
            android:id="@+id/thumb1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="4" />

        <Thumbnail
            android:id="@+id/thumb2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="4" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:weightSum="10" >

         <Thumbnail
             android:id="@+id/thumb3"
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="4" >
         </Thumbnail>

        <Thumbnail
            android:id="@+id/thumb4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="4" />

    </LinearLayout>

</LinearLayout>

ご協力いただきありがとうございます

4

4 に答える 4

28

s に目に見えないViewsLinearLayoutをスペーサーとして配置し、layout_weightメカニズムを使用して相対的なサイズを割り当てることができます。

例:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <Thumbnail
        android:id="@+id/thumb1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="4" />

    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:visibility="invisible"/>

    <Thumbnail
        android:id="@+id/thumb2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="4" />

</LinearLayout>
于 2013-04-24T19:44:52.750 に答える
21

2017 年 8 月 1 日に追加:

この回答の 2 つのレイアウトは非推奨になりましたが、 で同じ機能を取得する方法についての説明がありますConstraintLayout。これを指摘してくれたdpgに感謝します。

リソースでパーセンテージを使用する予定がある場合は、この回答が役立つ場合があります。


古い答え:

サポート ライブラリのバージョン 23.0.0 で、より良い方法が登場しました (そろそろですね)。PercentFrameLayoutまたはPercentRelativeLayoutを使用できるようになりました。どちらも次の属性を持っています。

  • layout_widthPercent
  • layout_heightPercent
  • layout_marginPercent
  • layout_marginLeftPercent
  • layout_marginTopPercent
  • layout_marginRightPercent
  • layout_marginBottomPercent
  • layout_marginStartPercent
  • layout_marginEndPercent

PercentLayoutHelper.PercentLayoutParamsもご覧ください。

于 2015-08-21T12:18:26.143 に答える
0

ここで画像を見て、可能なことは、相対レイアウトを使用して、その中に線形レイアウトを配置することです。画像ビューを適切に合わせたい場合は、weightSum を使用することもできます。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="5dp"
    android:layout_marginLeft="5dp" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:orientation="vertical" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:orientation="vertical" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</RelativeLayout>
于 2013-04-24T20:01:02.477 に答える