gpt4 book ai didi

java - 以编程方式更改 ImageView 大小

转载 作者:行者123 更新时间:2023-11-29 22:22:51 25 4
gpt4 key购买 nike

我有一个包含 3 个 ImageView 的相对布局。第一个是正方形图像,第二个仅用于间距,第三个是另一个正方形图像。

这是该布局的 xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radioSV"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/radioLayout"
android:orientation="vertical"
android:gravity="center">

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">

<ImageView
android:id="@+id/sssImageView"
android:src="@drawable/radio_sss_400_r"
android:layout_width="10sp"
android:layout_height="10sp"
android:layout_gravity="center"
android:scaleType="centerCrop">
</ImageView>

<!-- spacing -->

<ImageView
android:id="@+id/spacing1"
android:background="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="10dip"
android:layout_below="@id/sssImageView">
</ImageView>

<ImageView
android:id="@+id/gaImageView"
android:src="@drawable/radio_ga_400_r"
android:layout_width="10sp"
android:layout_height="10sp"
android:layout_gravity="center"
android:scaleType="centerCrop"
android:layout_below="@id/spacing1">
</ImageView>

</RelativeLayout>
</LinearLayout>
</ScrollView>

现在,我希望我的应用适用于各种屏幕密度,因此,在 java 文件中,我请求密度并随后使用 switch-case 语句。在此语句中,必须更改 2 个 ImageView(sssImageViewgaImageView)的大小(宽度、高度)。

例如,如果屏幕密度很高,我希望 ImageViews 的宽度和高度为 200sp。我刚刚将 10sp 作为“标准”值放入 xml。

这是高屏幕密度用例语句的一部分:

case DisplayMetrics.DENSITY_HIGH:
layoutParams = new RelativeLayout.LayoutParams(val_high, val_high);
sssImageView.setLayoutParams(layoutParams);
sssImageView.setMaxHeight(val_high);
sssImageView.setMaxWidth(val_high);

gaImageView.setLayoutParams(layoutParams);
gaImageView.setMaxHeight(val_high);
gaImageView.setMaxWidth(val_high);
break;

此外,val_high 为 200sp:

int val_high = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP, 200, this.getResources().getDisplayMetrics());

现在,带有 ImageView sssImageView 的部分可以完美运行。它正确地将图像从 10sp 放大到 200sp(不用担心 - 图像最初不是 10sp!)。问题 是另一个 ImageView gaImageView 将自己置于 sssImageView 之上并破坏了布局。如果我用 gaImageView 注释掉这 3 行,它在布局中的正确位置,但当然仍然很小 (10sp)。

我也尝试过相反的方法:用 sssImageView 注释掉 3 行,只操作 gaImageView。现在顶部的 ImageView (sssImageView) 位于正确的位置,并且如预期的那样小。但是,底部 ImageView gaImageView 将自己定位在 sssImageView 之上,而不是在 xml 布局文件中所写的下方。

这里有什么问题吗?

最佳答案

我设法解决了这个问题。

下面是 DENSITY_HIGH 案例语句的代码:

case DisplayMetrics.DENSITY_HIGH:               
display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();

// 0.36 is a scaling factor
int val_high = (int) (height*0.36);

sssImageView.setId(1);
gaImageView.setId(2);
spacing.setId(3);

layoutParams = new RelativeLayout.LayoutParams(val_high, val_high);
layoutParams2 = new RelativeLayout.LayoutParams(val_high, val_high);
layoutParams3 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
(int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 10, this.getResources().getDisplayMetrics()));

sssImageView.setMaxHeight(val_high);
sssImageView.setMaxWidth(val_high);
relativeLayout.updateViewLayout(sssImageView, layoutParams);

layoutParams3.addRule(RelativeLayout.BELOW, sssImageView.getId());
relativeLayout.updateViewLayout(spacing, layoutParams3);

layoutParams2.addRule(RelativeLayout.BELOW, spacing.getId());
gaImageView.setMaxHeight(val_high);
gaImageView.setMaxWidth(val_high);
relativeLayout.updateViewLayout(gaImageView, layoutParams2);
break;

一般来说,看起来我必须以编程方式“重新创建”xml 文件。

关于java - 以编程方式更改 ImageView 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6683004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com