【问题标题】:Display image based on screen size根据屏幕尺寸显示图像
【发布时间】:2013-08-18 12:17:28
【问题描述】:

我在drawable 文件夹中有以下图像550X257

不同尺寸的屏幕显示不同:

无论使用什么设备,我如何确保它填充父宽度。为了测试它,我按比例放大了图像并将其放在不同的 Density 文件夹中,但图像在更大的屏幕上显示得更小。

我的 XML 看起来像这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="@drawable/bd" >

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button1"
        android:layout_marginLeft="64dp"
        android:layout_toRightOf="@+id/button1"
        android:text="Button" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="46dp"
        android:layout_marginTop="192dp"
        android:text="Button" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_margin="0dp"
        android:padding="0dp"
        android:src="@drawable/test" />

</RelativeLayout>

【问题讨论】:

  • 是的,我有 DP 与图形编辑程序中的像素相比如何。我按比例放大了图像并将其放在 XHPDI 文件夹中,这是大屏幕使用的,它变得比这里显示的还要小。

标签: java android android-image


【解决方案1】:

你有两个选择

首先是为不同的 dpi 设备(ldpi、mdpi、hdpi、xdpi)转换图像并将图像放入文件夹 drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xdpi

上述方法可能不适合你

第二种方法是检测设备的大小并相应地设置图像的宽度和高度(以像素为单位)

通过这种方法检测屏幕尺寸

    Display display = activity.getWindowManager().getDefaultDisplay();
    DisplayMetrics dm= new DisplayMetrics();
    display.getMetrics(dm);
    Log.i("widthxheight",dm.widthPixels+"x"+dm.heightPixels;

现在我希望您可以像这样使用 widthPixels 或 heightPixels 来确定图像的宽度:int imgwidth=(int)(widthPixels*0.80);//80 percent of width 并以相同的比例计算高度:int imgheight=(imgwidth*originalimageheight)/originalimagewidth;

之后,您可以使用 LayoutParameters 以编程方式设置图像的宽度高度

【讨论】:

  • 哪种方法最好?另外,如果我调整图像大小,我应该将其调整到什么大小?你也知道Nexus底部的填充物在哪里吗?
  • 10" 和 7" 的平板电脑使用什么文件夹?
  • 这取决于 dpi 不同,屏幕尺寸不同
  • 假设设备是 mdpi,屏幕尺寸是 10 英寸,那么文件夹名称将是 drawable-mdpi-xlarge developer.android.com/guide/practices/screens_support.html 查看这篇文章以获取命名文件夹指南并了解屏幕尺寸和 dpi 差异抱歉回复晚了
  • 我对每张图片都使用了维度文件夹,这对我来说很有效。谢谢。
【解决方案2】:

改变

android:layout_width="wrap_content"

收件人:

android:layout_width="match_parent"

适合您的 ImageView。

【讨论】:

  • layout_width 只拉伸图像视图而不是图像本身。我正在尝试拉伸图像
  • 如果图像没有被拉伸,那么你可以尝试 imageview 的 scaletype 属性,它告诉 imageview 如何缩放位图我认为如果你使用 match_parent 然后使用 scaletype 作为 fitCenter 你也可以设置用于统一缩放的 dp 中的填充
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
相关资源
最近更新 更多