Я разрабатываю виджет домашнего экрана. Файл макета виджета, как показано ниже.
<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 пикселей, т / д. Поскольку Nexus One также имеет формат mdpi, я считаю, что 240dip эквивалентен 240 пикселям на Nexus One, а 200dip эквивалентен 200 пикселям на Nexus One, поэтому виджет не будет занимать 3 ячейки * 2 ячейки на устройстве Nexus One. К моему удивлению, при работе на устройстве Nexus One виджет занимает точно 3 ячейки * 2 ячейки, около 360 пикселей * 300 пикселей, на устройстве Nexus One.
Я в замешательстве. В приведенном выше макете xml для виджета указана ширина 240 точек и высота 200 точек, но почему на Nexus One Device это заняло 360 * 300 пикселей? Чего мне не хватает?
Спасибо.
В ответ на комментарий mbaird:
Я все еще в замешательстве. Предположим, я указал ImageView, picture1, с 90dip * 100dip, как показано ниже в виджете. Какое измерение в пикселях устройства будет у ImageView на устройстве Nexus One?
<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);
}
Как я понимаю, drawable.setBounds () использует физические пиксели в своих параметрах. Мне нужно знать размер ImageView в измерении физических пикселей.
Спасибо.