安卓:DP单位下启动图标的宽度和高度

6
在 Android 中,我们可以按屏幕密度(如 LDPI、HDPI 和 MDPI)定义资源。
我希望构建一个 UI,其中 TextLayout 的宽度和高度与其旁边的 ImageView 相同。ImageView 包含一个图像,与启动器图标相同大小(例如 HDPI 为 72px)。
是否有一种方法可以知道图标在“dp”中具有特定的宽度和高度(不需要 kwnoi),以便我可以硬编码 XML。我认为这是可能的,因为 dp 独立于设备,但找不到任何获取 dp 值的方法。
<TextView 
    android:id="@+id/holidaylistitem_day"
    android:layout_width="<X>dp"
    android:layout_height="<Y>dp" 
    android:text="1st"/>

<ImageView 
    android:id="@+id/holidaylistitem_type"
    android:src="@drawable/ic_launcher"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

我需要的是X和Y值,以使它们的大小相同。

你是在YouTube上发布了关于PHP、MySQL和Apache2的视频的人吗? - Android Killer
4个回答

9

我认为你说得对,这也是有道理的,谢谢,我会去看一下的。我没有完整地阅读链接,错过了细节。非常感谢你指出来。 - Ziyan Junaideen

1

在Android中,由于存在不同类型的设备,因此有4种情况:

ldpi --> 36x36
mdpi --> 48x48
hdpi -->72x72
xhdpi --> 96x96

请查看此链接


1
那就是像素值对吧?我认为@Sparky是正确的,我大致浏览了一下页面,但错过了值,即48dp。像素值可以工作,但问题是,根据我的经验,必须编写几个布局文件。我喜欢在一个文件中完成所有事情,因为一旦我对其中一个进行更改,我就会忘记编辑其他文件。至于你的问题,关于YouTube视频,是的,那是我。 - Ziyan Junaideen

1
如Android Killer所说,“有4种情况,因为Android设备的类型不同……”。您可以获取dpi值。使用以下公式将像素(px)转换为DP:

dp = (px*160)/dpi
参考资料:
developer.android


0

我有一个更好的解决方案适用于你的情况,但它有点复杂。我们来看:

  1. 当您无法决定图标大小,但确定它是正方形,并且希望其宽度/高度与水平放置的图标相同。您可以这样做:

    android:layout_alignTop="@+id/holidaylistitem_type" android:layout_alignBottom="+id/holidaylistitem_type"

  2. 现在您的TextView位置和高度已固定。然后您扩展了TextView并执行以下操作:

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
    
        if (width > height) {
            width = height;
        }     
        super.onMeasure(
                MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
        );
    }
    
  3. ImageView大小为正方形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接