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是相关的。