Android Widget резервирует 3 ячейки вместо 2 ячеек по высоте - PullRequest
0 голосов
/ 04 сентября 2011

У меня странная проблема.Я изменил макет виджета на высоту 200dp, чтобы уменьшить пространство до 2 ячеек на смартфоне.Но когда я хочу разместить его на экране, он всегда резервирует 3 ячейки и размещает виджет в центре 3 ячейки.Ширина Android 2.3 позволяет изменить размер виджета вне системы.Когда я делаю это, я получаю виджет для 2 ячеек без потери макета.

У вас есть идеи?

Стефан

// РЕДАКТИРОВАТЬ Я добавил код XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" 
    android:layout_marginLeft="8dip" 
    android:layout_marginRight="8dip" 
    android:orientation="vertical"
    android:layout_height="200dp">


    <LinearLayout 
    android:layout_width="match_parent" 
    android:id="@+id/linearLayout55" 
    android:layout_height="187dip" 
    android:orientation="vertical"
    android:paddingTop="4dip"
    android:background="@drawable/design">

    <LinearLayout android:layout_width="match_parent" android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:gravity="center_vertical" android:paddingLeft="4dip">
        <ImageView android:layout_width="60dip" android:src="@drawable/icon" android:id="@+id/imageView1" android:layout_height="60dip"></ImageView>

        <LinearLayout android:layout_width="match_parent" android:id="@+id/linearLayout11" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="vertical">
            <TextView android:layout_width="wrap_content" android:id="@+id/AppTitel" android:textColor="#3b5091" android:paddingLeft="4dip" android:text="My App" android:textSize="20dip" android:textStyle="bold|italic" android:layout_height="wrap_content"></TextView>
            <TextView android:layout_width="wrap_content" android:id="@+id/AppCopyRight" android:textColor="#FFFFFF" android:paddingLeft="4dip" android:text="dummy text" android:textSize="9dip" android:textStyle="italic" android:layout_height="wrap_content"></TextView>
        </LinearLayout>
    </LinearLayout>

    <LinearLayout android:layout_width="299dip" android:id="@+id/ll_con_1" android:gravity="center_vertical" android:paddingLeft="4dip" android:background="@drawable/item_states" android:layout_height="50dip" android:layout_marginLeft="2dip" android:clickable="true" android:visibility="gone" android:orientation="vertical" android:paddingTop="0dip">
        <TextView android:layout_width="wrap_content" android:textColor="#FFFFFF" android:layout_height="wrap_content" android:id="@+id/Item1" android:text=""></TextView>
        <TextView android:layout_width="wrap_content" android:textColor="#CCCCCC" android:layout_height="wrap_content" android:id="@+id/Item1_msg" android:text=""></TextView>
    </LinearLayout>
    <LinearLayout android:layout_width="299dip" android:id="@+id/ll_con_2" android:gravity="center_vertical" android:paddingLeft="4dip" android:background="@drawable/item_states" android:layout_height="50dip" android:layout_marginLeft="2dip" android:clickable="true" android:visibility="gone" android:orientation="vertical" android:paddingTop="0dip">
        <TextView android:layout_width="wrap_content" android:textColor="#FFFFFF" android:layout_height="wrap_content" android:id="@+id/Item2" android:text=""></TextView>
        <TextView android:layout_width="wrap_content" android:textColor="#CCCCCC" android:layout_height="wrap_content" android:id="@+id/Item2_msg" android:text=""></TextView>
    </LinearLayout>


    </LinearLayout>


    <LinearLayout android:layout_width="match_parent" android:id="@+id/linearLayout56" android:gravity="center_horizontal" android:layout_height="45dip" android:layout_marginTop="-17dip">
        <ImageButton android:layout_height="30dip" android:layout_width="60dip" android:src="@drawable/rolodex" android:id="@+id/BtnMSGs" android:background="@drawable/design_item" android:layout_marginRight="5dip"></ImageButton>
        <ImageButton android:layout_height="30dip" android:layout_width="60dip" android:src="@drawable/pencil" android:id="@+id/BtnNewMSG" android:background="@drawable/design_item"></ImageButton>
    </LinearLayout>


</LinearLayout>

Ответы [ 3 ]

1 голос
/ 04 сентября 2011

Вы должны создать макет виджета другим способом. Внутри xml-папки создайте провайдер виджетов

    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dip"
    android:minHeight="220dip"
    android:updatePeriodMillis="1000000"
    android:initialLayout="@layout/widget"
/>

затем внутри папки макета создайте макет без указания ширины и высоты

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:background="@drawable/widget_background"
    android:layout_margin="10dip">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:layout_weight="3">
        <TextView android:id="@+id/widget_textview"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"   
            android:gravity="center"
            android:textSize="24dip"
            android:textColor="#0d0d0c"
            android:padding="5dip">
        </TextView>
        <TextView android:id="@+id/widget_textview2"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"   
            android:paddingLeft="20dip"
            android:paddingRight="20dip"
            android:textColor="#0d0d0c"
            android:textSize="22dip">
        </TextView>
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        android:layout_weight="7">
        <TextView android:id="@+id/widget_textdate"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"   
            android:paddingLeft="20dip"
            android:paddingBottom="10dip"
            android:textColor="#0d0d0c"
            android:textSize="20dip">
        </TextView>
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_weight="7"
        android:paddingTop="5dip">
        <Button
            android:id="@+id/previous_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Poprzednie"
            android:textSize="16dip">
        </Button>
        <Button
            android:id="@+id/refresh_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Odśwież"
            android:textSize="16dip">
        </Button>
        <Button
            android:id="@+id/next_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Następne"
            android:textSize="16dip">
        </Button>
    </LinearLayout>
</LinearLayout>

вот как я это сделал.

0 голосов
/ 04 сентября 2011

Как вы можете прочитать здесь http://developer.android.com/guide/practices/ui_guidelines/widget_design.html#sizes одна ячейка в высоту занимает 80 пикселей и 100 в ширину, поэтому вы должны изменить 200 на 160, если вы хотите 2 ячейки

0 голосов
/ 04 сентября 2011

Вы пытались установить высоту 146dp?

Из документации :

Поскольку ориентация макета главного экрана (и, следовательно, размеры ячеек)) может изменить, как правило, вы должны принять наихудший размер ячейки 74 пикселя для высоты и ширины ячейки.Однако необходимо вычесть 2 из конечного измерения, чтобы учесть все ошибки целочисленного округления, возникающие при подсчете пикселей.Чтобы найти минимальную ширину и высоту в пикселях, не зависящих от плотности (dp), используйте следующую формулу:

(количество ячеек * 74) - 2

Следуя этой формуле, следует использовать 72 dpдля высоты одной ячейки 294 dp и для ширины четырех ячеек.

...