0

私のレイアウトは以下です。一部の mdpi 画面では、内側の LinearLayout がカットオフされます。私がやりたいことは、内側の LinearLayout が常にすべてのコンテンツを表示するようにすることです。ImageView を必要なだけ小さく縮小して、その下の LinearLayout がすべてのコンテンツを表示するようにしたいと思います。大きな画面では、ImageView はその画像 (つまりwrap_content) と同じ大きさにする必要があります。

ImageViewlayout_weightに 0.1 を、LinearLayoutlayout_weightに 0.9 を指定しようとしましたが (両方にlayout_height0dp を指定)、大きな画面では ImageView がレイアウトの一番上に表示されてしまいます。ルート LinearLayout のコンテンツを中央に配置したいと思います。

そのため、その下の LinearLayout が常に完全に表示されるように、必要な場合にのみ ImageView を縮小することは可能ですか? さまざまな画面サイズ/解像度用に複数のレイアウト ファイルを作成することなく、これを達成しようとしています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/tab_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".messages.MessagesHomeFragment"
    >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="40dp"
        android:src="@drawable/elephant_large" />

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

        <Button
            android:id="@+id/button_send_voice_message"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Send a Voice Message" />

        <Button
            android:id="@+id/button_send_sms_message"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Send an SMS" />

        <Button
            android:id="@+id/button_view_messages"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Manage Messages" />

        <Button
            android:id="@+id/button_invite_sms_recipients"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Invite SMS Recipients" />
    </LinearLayout>

</LinearLayout>
4

2 に答える 2

0

これが可能かどうかはわかりません...どちらかといえば、以下に説明するレイアウトのようなものを試してみます(試していないので、そのようなもので可能な限り画像が大きくなるのではないかと思います)。ImageViewのレイアウト属性のみを変更しました

それでも機能しない場合は、ImageViewに基づいて独自のウィジェットを定義することはそれほど難しくありません。ここで、取得するmeasureSpecが画像よりも小さい場合にのみonLayoutメソッドをオーバーライドしてスケールダウンする必要があります...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/tab_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".messages.MessagesHomeFragment"
    >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="centerInside"
        android:layout_marginBottom="40dp"
        android:src="@drawable/elephant_large" />

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

        <Button
            android:id="@+id/button_send_voice_message"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Send a Voice Message" />

        <Button
            android:id="@+id/button_send_sms_message"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Send an SMS" />

        <Button
            android:id="@+id/button_view_messages"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Manage Messages" />

        <Button
            android:id="@+id/button_invite_sms_recipients"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Invite SMS Recipients" />
    </LinearLayout>

</LinearLayout>
于 2012-07-28T23:05:01.167 に答える
0

以下のレイアウトを使用して、私がやろうとしていたことを達成することができました。重要なのは、ルート LinearLayout の高さをwrap_contentに設定しlayout_weight、ImageView の を 1 に設定することでした。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    style="@style/tab_fragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical"
    >

    <ImageView
        android:id="@+id/elephantImageView"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="fitCenter"
        android:layout_marginBottom="20dp"
        android:src="@drawable/elephant_large"
        />

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

        <Button
            android:id="@+id/button_send_voice_message"
            android:layout_width="239dp"
            android:layout_height="wrap_content"
            android:text="Send a Voice Message" />

        ...
    </LinearLayout>
</LinearLayout>
于 2012-07-28T23:29:24.000 に答える