2010-03-31 140 views
0

我正在設計主屏幕小部件。小部件佈局文件如下所示。在正常屏幕和大屏幕中對主屏幕小部件大小感到困惑

<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的大小。

謝謝。

回答

0

你混合設備獨立像素和硬件設備的像素。我認爲這不會太好。

在英雄身上佔用3x2的部件在Nexus One上佔用3x2。這就是我在回答你之前的問題時試圖解決的問題:Home screen widget size for large screen or hdpi?