java - 在 DP Java 中以编程方式设置 ImageView 大小

标签 java android xml android-layout imageview

<分区>

我想在 Android 中设置 ImageView 的宽度和高度。 ImageViewXML 中不存在。它是在这里创建的:

public void setImageView(int i,Integer d, LinearLayout layout ) {
    ImageView imageView = new ImageView(this);
    imageView.setId(i);
    imageView.setPadding(2, 2, 2, 2);
    imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), d));
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    layout.addView(imageView);
}

并将其放入此 LinearLayout 中:

<HorizontalScrollView
    android:id="@+id/horizontal_scroll_view"
    android:layout_width="fill_parent"
    android:layout_gravity="center"
    android:background="@drawable/white_lines"
    android:layout_weight="15"
    android:layout_height="0dp" >

    <LinearLayout
        android:id="@+id/scroll_view_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#999A9FA1"
        android:orientation="horizontal" >

    </LinearLayout>

</HorizontalScrollView>

所以基本上我多次调用 setImageView 方法并用包含在 LinearLayouts 中的 ImageViews 填充我的 Horizo​​ntalScrollView。我需要以 DP 而不是像素为单位设置此高度,以便它在所有设备上看起来都一样!!!

最佳答案

你需要将你的值转换成dps,你可以使用下面的函数来完成:

public static int dpToPx(int dp, Context context) {
    float density = context.getResources().getDisplayMetrics().density;
    return Math.round((float) dp * density);
}

然后,要将 ImageView 大小设置为 px 值,您可以这样做:

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)imageView.getLayoutParams();
params.width = dpToPx(45);
params.height = dpToPx(45);
imageView.setLayoutParams(params);

(为 ImageView 所在的任何容器更改 LinearLayout)

编辑:Kotlin 版本

转换为Px的函数在kotlin中可以这样写(作为扩展)

fun Int.toPx(context: Context) = this * context.resources.displayMetrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT

然后可以这样使用:

view.updateLayoutParams {
    width = 200.toPx(context)
    height = 100.toPx(context)
}

关于java - 在 DP Java 中以编程方式设置 ImageView 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35803313/

相关文章:

Java:包含源代码的类文件?

java - 如何使用 JDOM 通过其属性值获取元素?

java - 使用 Twitter4j 每日趋势?

android - 如何管理 GridLayoutManager 中的空跨度?

android - 在没有Eclipse或Ant的情况下使用LibGDX

android - ReActiveAndroid - 未找到引用的数据库信息

python - 如何简化我的代码 - 提取相同 xml 标记名称的所有节点值

java - 用于基于表单的身份验证的 Tomcat 7 领域配置

Java exec 使用输入重定向

xml - 使用 xslt 重命名重复属性