Android:ビューを拡大して利用可能なスペースを埋めるにはどうすればよいですか?


89

これは簡単に思えますが、どうすればいいのかわかりません。EditTextと2つのImageButtonを含む水平レイアウトがあります。ImageButtonを固定サイズにし、EditTextがレイアウトの残りのスペースを占めるようにしたい。どうすればこれを達成できますか?

<LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <EditText 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </EditText>
        <ImageButton 
            android:src="@drawable/img1"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
</LinearLayout>

回答:


51

相対レイアウトでこれを試してください

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <ImageButton 
        android:id="@+id/btn1"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_alignParentRight="true"/>
    <ImageButton 
        android:id="@+id/btn2"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_toLeftOf="@+id/btn1"/>
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/btn2">
    </EditText>

</RelativeLayout>

4
ありがとうございました。これはうまくいきます。(ただし、ジョセフが指摘したように、ImageButtonsはEditTextの前に定義する必要があります)。
ab11

1
fill_parent-この定数はAPIレベル8から廃止され、{@ code match_parent}に置き換えられました。
Zon

144

レイアウトを同じにしたい場合(つまり、テキストの後のボタン)、layout_weightプロパティをとともに使用しますfill_parent

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <EditText 
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </EditText>
    <ImageButton 
        android:src="@drawable/img1"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
    <ImageButton 
        android:src="@drawable/img2"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
 </LinearLayout>

EditText「重み」を与えると、最後に把握され、ボタンが優先されます。さまざまなlayout_weightsで遊んで、どれだけ楽しいか見てみましょう!


1
ありがとうございました。私は私のレイアウトで3つの領域を持っている(ヘッダ、フッタのContent WebViewのと)それはWebViewのlayout_weight = 1とフッタのlayout_weight = 0に設定することで、問題を解決
MKK

たった一人の子供にウェイトと0dpを設定するトリックを知りませんでした。ありがとう!
Marcel Bro

1
これは一般的にベストプラクティスと見なされていますか?Androidがビューを解決する順序に影響を与えることができるのは興味深いことです。
サイプレスフランケンフェルト2014

2
幅は維持する必要があります0と思います
Bibaswann Bandyopadhyay

19

はい:

<RelativeLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">

        <ImageButton 
            android:id="@+id/button1"
            android:src="@drawable/img1"
            android:layout_width="50dip"
            android:layout_alignParentTop="true" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/button1"
            android:layout_height="50dip">
        </ImageButton>
        <EditText 
            android:layout_below="@id/button"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">
        </EditText>
</RelativeLayout>

レイアウトの要点は次のとおりです。

  • 固定サイズのアイテムはレイアウトの最初に配置されます。このようにして、Androidがfill_parentファイルの高さの高さを計算するときに、残りのスペースのみが考慮されます。他には何もありませんでした
  • EditTextの高さはfill_parentmatch_parent2.2以降)で、利用可能な残りのスペースを占めます。

あなたの質問を読んだことがなくて申し訳ありませんでした。上記のコードは、垂直に実行したい場合の答えを提供します。水平レイアウトの場合、@ Sunilによって投稿されたコードは機能するはずです。


ジョセフありがとう。これは機能します。しかし、私はスニルがわずかに速いことを評価しました。
ab11

12

layout_widthまたはlayout_heightを使用して0dp(残りのスペースを埋める向きによって)。次に、layout_weightを使用して残りのスペースを埋めます。

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