Android:LinearLayout内のすべての要素を同じサイズにする方法は?


80

ビデオのタイトルとタグを表示するダイアログを作成したいと思います。テキストの下に、[表示]、[編集]、[削除]ボタンを追加して、これらの要素を同じサイズにします。LinearView内の要素を同じサイズにするために.xmlレイアウトファイルを変更する方法を知っている人はいますか?

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

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

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

          <TextView 
              android:layout_width="wrap_content" 
              android:layout_height="wrap_content" 
              android:id="@+id/txtTitle" android:text="[Title]" >
          </TextView>

          <TextView 
              android:layout_width="wrap_content"
              android:layout_height="wrap_content" 
              android:id="@+id/txtTags"            
              android:text="[Tags]" >
          </TextView>

    </LinearLayout>

    <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal">

        <Button 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:id="@+id/btnPlay" 
           android:text="View">
        </Button>

        <Button 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:id="@+id/btnEdit" 
            android:text="Edit">
        </Button>

        <Button 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:id="@+id/btnDelete" 
            android:text="Delete">
        </Button>

    </LinearLayout>

</LinearLayout>

貼り付けたファイルの内容を変更して、解決策を教えていただければ幸いです。

ありがとう!

回答:


173

android:layout_width="0px"android:layout_weight="1"3つButtonのを使用します。つまり、ボタンは0ピクセルを超えないようにする必要がありますが、3つのボタンはそれらの間の余分なスペースを分割する必要があります。それはあなたが望む視覚効果を与えるはずです。


4
あなたは場合は本当にあなたに望んでいた代わりにアンドロイドとTableLayoutを使用することもできます。stretchColumns =「0,1,2」。
ジェレミーローガン

素晴らしい...つまり、幅を0pxにすると、重量が設定を上書きしますか?なぜそうなのですか?
noob 2013

ボタンがにある場合、これは機能しませんGridLayout。この場合、それらは本当に0px広くなります。多分GridLayout受け入れませんlayout_weightか?
Zelphir Kaltstahl 2015年

@Zelphir:GridLayout絶対に使用しませんlayout_weight。これはLinearLayout、、およびおそらくの一部のサブクラスによってのみ使用されLinearLayoutます。
CommonsWare 2015年

33

別の方法は作ることですandroid:layout_width="fill_parent"、そしてandroid:layout_weight="1"これもうまくいきます!!!


19
あなたはこの答えに本当に興奮していました。:-)熱意が大好きです!
ああダニーボーイ

CommonsWareのソリューションは私にはうまくいきませんでしたが、これでうまくいきました!:)「fill_parent」よりも「match_parent」を使用する必要があると聞いたので使用しましたが、どちらも機能します。
codepleb 2014

これらの要素のLinearLayout親には、layout_width = "match_parent"も必要です。
パタプーム

19

使用のLinearLayout希望とweightSumと同等の持つ要素を作成layout_weightを。ここに例があります...

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="5">

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_share_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_search_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_event_note_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_brush_white_36dp"/>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_menu_white_36dp"/>
</LinearLayout>

したがって、すべての要素の重みの合計は5です。これがスクリーンショットです...

ここに画像の説明を入力してください

Googleマテリアルデザインのアイコンが使用されていることに注意してください。これがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.