Android:启动器图标DP中的宽度和高度

时间:2012-03-05 13:40:46

标签: android xml user-interface

在android中,我们可以通过屏幕密度定义资源,例如LDPI,HDPI和MDPI。

我希望构建一个具有TextLayout的UI,其宽度和高度与其旁边的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值,因此两者的大小相同。

4 个答案:

答案 0 :(得分:7)

Android Design Guide有一个描述推荐icon dimensions的页面。简而言之,启动器图标为48x48 dp。

答案 1 :(得分:1)

有4种情况,因为android中有不同类型的设备:

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

选中Link

答案 2 :(得分:1)

正如Android Killer所说,“有四种情况,因为Android中有不同类型的设备......”。你可以得到dpi。要将px转换为dp,请使用:

  

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

答案 3 :(得分:0)

我为您的情况提供了更好的解决方案,但它有点复杂。我们走了:

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

    机器人:layout_alignTop =&#34; @ + ID / holidaylistitem_type&#34; 机器人:layout_alignBottom =&#34 + ID / holidaylistitem_type&#34;

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

    @覆盖
    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大小的Square。