Смущает размер виджета на главном экране на обычном и большом экране - PullRequest
0 голосов
/ 01 апреля 2010

Я разрабатываю виджет домашнего экрана. Файл макета виджета, как показано ниже.

<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 в измерении физических пикселей.

Спасибо.

1 Ответ

0 голосов
/ 01 апреля 2010

Вы смешиваете устройство независимых пикселей и аппаратных пикселей устройства. Я не думаю, что это сработает слишком хорошо.

Виджет, занимающий 3х2 у героя, будет занимать 3х2 у Nexus One. Вот что я пытался донести в своем ответе на ваш предыдущий вопрос: Размер виджета главного экрана для большого экрана или hdpi?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...