当前位置: 首页 > 面试题库 >

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

陈马鲁
2023-03-14
问题内容

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

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方法很多次,并填写我HorizontalScrollViewImageViews封闭在LinearLayouts。我需要将此高度设置为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);

(更改LinearLayoutImageView所在的容器)

编辑: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)
}


 类似资料:
  • 问题内容: 有没有一种方法可以通过编程而不是作为vm参数来设置最大Java堆大小? 就像是: 问题答案: 不适用于任何Hotspot JVM。只能在命令行上指定JVM堆参数,然后在JVM的生存期内对其进行固定。 使用Hotspot Java实现,“更改”应用程序堆大小的唯一方法是使用不同的命令行参数在新的JVM中重新启动它。 (我隐约记得,其他一些供应商的JVM 确实 允许在运行的JVM中更改某些

  • 问题内容: 如何通过ImageView编程设置的宽度和高度? 问题答案: 设置ImageView的高度可能为时已晚,但是为了其他有相同问题的人: 希望这可以帮助。 重要。如果要在布局已经“布局”之后设置高度,请确保还调用:

  • 我在Android中以编程方式设置APN。当我运行代码时,我得到。如果我在清单中提到这个权限,我得到的错误就像这些权限只有SYSTEM APPS。你能帮我解决这个问题吗?参考链接

  • 问题内容: 我看到了一些示例代码,它们将相同的OnClick事件分配给Android中的所有按钮(即使它们执行的动作完全不同)。如何用Swift做 Android示例: 注意:我不想以编程方式创建按钮。 问题答案: 在iOS上,您没有设置监听器;你添加一个目标(物体)和行动(方法签名,在iOS的说法“选择”)将(这是一个子类): 在这种情况下,第一个参数是目标对象。该操作是一个选择器(方法签名),

  • 问题内容: 如何确保从hibernate.cfg.xml加载所有属性,然后以编程方式添加其他属性?我看到了以下代码片段,但它看起来像是全新的配置,而不是现有配置的补充。 问题答案: 您显示的代码段是您所需要的。只需使用您现有的配置,而不是创建一个新的配置即可。 如果不是您实例化配置(例如,spring),则需要扩展创建它的类。

  • 我试图在我的应用程序中使用模拟位置进行测试。要接收位置更新,我使用最新的Android开发者留档在这里:https://developer.android.com/training/location/receive-location-updates 本教程使用FusedLocationProviderClient和locationClient。requestLocationUpdates(crea