Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免出现大图像会将其他布局挤出屏幕_Java_Android_Xml_Layout - Fatal编程技术网

Java 避免出现大图像会将其他布局挤出屏幕

Java 避免出现大图像会将其他布局挤出屏幕,java,android,xml,layout,Java,Android,Xml,Layout,我试了好几个小时,但一无所获 这是我的密码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width=&q

我试了好几个小时,但一无所获

这是我的密码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center">
   
    <LinearLayout
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout1"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_gravity="center">
        <TextView
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="A dog"
            android:id="@+id/textView1"
            android:textSize="50sp"></TextView>
        <ImageView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@drawable/dog"
            android:id="@+id/imageView1"></ImageView>
    </LinearLayout>
   
</LinearLayout>

正如您在下面的屏幕中所看到的,无论大小屏幕,一切都正常

但我真正需要的是把文字放在图片下面。更改其在容器中的顺序,结果是:

它适用于比图像高的屏幕,但对于小屏幕,文本不可见。我怎样才能解决这个问题?请考虑这些问题:

  • 包含图像和文本的布局必须在其父级中居中(例如基本布局)(特别是对于长屏幕)
  • 如果屏幕太大或太小,拉丝机应保持其原始尺寸,当屏幕变小时,拉丝机应减小(保持纵横比)

提前感谢

您可以缩放图像以适应特定的宽度和高度

参考这里

编辑:

你可以试试类似的东西

public static final ImageView.ScaleType CENTER_INSIDE
自:API级别

均匀缩放图像(保持图像的纵横比),使图像的两个尺寸(宽度和高度)等于或小于视图的相应尺寸(减去填充)。然后图像在视图中居中。从XML中,使用以下语法:

android:scaleType="centerInside
编辑:也可以使用位图

类似于

         Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int newWidth = 640;
        int newHeight = 480;

        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);

        // create the new Bitmap object
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width,
                height, matrix, true);
        BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);

        ImageView imageView = new ImageView(this);
        imageView.setImageDrawable(bmd);
        imageView.setScaleType(ScaleType.CENTER);

        linearLayout.addView(imageView, new LinearLayout.LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        setContentView(linearLayout);       }
}

我测试了该代码,它具有您想要的行为。如果你需要更多的帮助,请告诉我

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
    <LinearLayout
        android:layout_width="fill_parent"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout1"
    >
        <RelativeLayout
            android:id="@+id/relativeLayout1"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
        >
            <LinearLayout
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:id="@+id/linear2"
                android:layout_alignParentBottom="true"
            ></LinearLayout>
            <TextView
                android:layout_above="@id/linear2"
                android:text="TextView"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:layout_height="wrap_content"
                android:id="@+id/textView1"
                android:gravity="center"
                android:layout_width="wrap_content"
                android:layout_centerHorizontal="true"
            ></TextView>
            <ImageView
                android:id="@+id/imageiffel"
                android:src="@drawable/my_image"
                android:layout_above="@id/textView1"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
            ></ImageView>
        </RelativeLayout>
    </LinearLayout>

</LinearLayout>


谢谢您的回答。将图像的缩放类型设置为布局内的中心与第二个图像的第二部分(文本仍然缺失)相同。这些图像是存储在应用程序内还是从网站或服务器下载的?如果它们存储在应用程序中,为什么不为HDPI将图像缩小,这样标题就可以放进去。根据屏幕分辨率制作不同大小的图像(如果你将图像存储在应用程序中)。我正在使用应用程序中存储的资源进行测试,但此问题的背景是使用从Internet urlsBTW恢复的位图,您可能希望在异步任务中运行此操作并检索您的图像谢谢您的时间。这似乎是一个有效的解决办法。我将尝试找出是否可以在XML中实现它,否则我将使用您的解决方案。使用RelativeLayout可以避免文本不可见(将文本设置为与父级底部对齐,并位于图像下方),但使用该选项后,文本不再在大屏幕中居中。有没有办法让它居中?谢谢你可以跳过这里所有的线性布局。只有RelativeLayout是相关的。