在正常屏幕和大屏幕中对主屏幕小部件大小感到困惑

问题描述:

我正在设计主屏幕小部件。小部件布局文件如下所示。在正常屏幕和大屏幕中对主屏幕小部件大小感到困惑

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/widget" 
android:layout_width="240dip" android:layout_height="200dip" 
    android:background="@drawable/base_all" 
/> 

我跑了HTC Hero的设备,其具有320个像素×480个像素与MDPI在屏幕上该窗口小部件。它在HTC Hero上完美运行。该部件需要3个单元×2单元空间,即240个像素×200个像素。

然后我在一个Nexus One设备上运行这个小部件,该设备的屏幕为480像素* 800像素,mdpi。由于Nexus One也是mdpi,因此我认为240dip相当于Nexus One上的240像素,200dip相当于Nexus One上的200像素,因此该部件不会在Nexus One设备上占用3个单元格* 2的单元格空间。令我惊讶的是,在Nexus One设备上运行时,该部件在Nexus One设备上采用精确的3单元* 2单元,大约360像素* 300像素。

我很困惑。上面的布局xml为窗口小部件指定宽度为240dip,高度为200dip,但为什么在Nexus One设备上需要360像素* 300像素?我错过了什么?

谢谢。


在回答mbaird的评论:

我仍然感到困惑。假设我使用90dip * 100dip指定一个ImageView,picture1,如下图所示。 Nexus One设备上的ImageView中的设备像素尺寸是多少?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/widget" 
android:layout_width="240dip" android:layout_height="200dip" 
    android:background="@drawable/base_all" 
> 
<ImageView android:id="@+id/picture1" 
    android:layout_width="90dip" 
    android:layout_height="110dip" 
    /> 
</RelativeLayout> 

我必须知道这一点,因为在我的节目,我必须借鉴的ImageView:

public void draw(Canvas canvas) { 
    ShapeDrawable drawable = new ShapeDrawable(new RectShape()); 
    drawable.getPaint().setColor(Color.WHITE); 
    drawable.setBounds(m_leftTopX, m_leftTopY, m_leftTopX + m_width, 
      m_leftTopY + m_height); 

    drawable.draw(canvas); 
} 

正如我understant,drawable.setBounds()在其参数使用物理像素。我需要知道物理像素尺寸的ImageView的大小。

谢谢。

你混合设备独立像素和硬件设备的像素。我认为这不会太好。

在英雄身上占用3x2的部件在Nexus One上占用3x2。这就是我在回答你之前的问题时试图解决的问题:Home screen widget size for large screen or hdpi?