0

我的布局如下。在某些 mdpi 屏幕上,内部 LinearLayout 被截断。我想要做的是确保内部的 LinearLayout 总是显示它的所有内容。我希望 ImageView 缩小到它需要确保它下面的 LinearLayout 显示它的所有内容。在大屏幕上,ImageView 应该和它的图像一样大(即wrap_content)。

我尝试将 ImageView a设为layout_weight0.1,LinearLayout a设为layout_weight0.9(并将它们layout_height都设为 0dp),但随后在较大的屏幕上,ImageView 最终位于布局的顶部。我希望根 LinearLayout 的内容居中。

那么是否可以仅在需要时使 ImageView 缩小,使其下方的 LinearLayout 始终完全可见?我试图在没有为不同的屏幕尺寸/分辨率创建多个布局文件的情况下完成此任务。

<?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 定义您自己的小部件应该不会太难,您只需要覆盖 onLayout 方法以缩小只有当您获得的 measureSpec 小于图像时...

<?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 回答