Как исправить объявление AppWidgetProvider, которое игнорирует минимальную ширину и минимальную высоту

Я объявил AppWidgetProvider, используя

        <receiver android:name="uk.co.bmc.rad.widgets.NearestOpenCragWidgetProvider" android:exported="false">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                   android:resource="@xml/nearest_open_crag_widget_info" />
        </receiver>

в res/xml я добавил ближайший_open_crag_Widget_info.xml, содержащий

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" >
    android:minWidth="486dp"
    android:minHeight="144dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/nearest_open_crag_widget"
    android:resizeMode="none">
</appwidget-provider>

Я запускаю это в эмуляторе Eclipse, и независимо от того, какие размеры я указываю для minWidth и minHeight, виджет добавляется с теми же размерами.

Как вы можете видеть внизу экрана: screenshot


В случае, если это проблема с макетом, я включу его здесь. Есть три RelativeLayouts, которые я (надеюсь) скрывать или раскрывать в зависимости от состояния

<?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:padding="@dimen/widget_margin"
    android:background="#525252" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:background="@color/bmc_red"
        android:gravity="center" >

        <TextView
            android:id="@+id/widget_title"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="center|fill_horizontal"
            android:gravity="center|center_horizontal"
            android:text="@string/the_nearest_open_crag_is_"
            android:textColor="@android:color/white"
            android:textSize="20dp" />
    </RelativeLayout>

    <ProgressBar
        android:id="@+id/nearest_crag_loading_progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:indeterminate="true" />

    <RelativeLayout
        android:id="@+id/nearest_crag_loading_error_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:visibility="gone" >

        <ImageView
            android:id="@+id/nearest_crag_error_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:contentDescription="@string/error_image_content_description"
            android:src="@android:drawable/ic_dialog_alert" />

        <TextView
            android:id="@+id/nearest_crag_loading_error"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/nearest_crag_error_image"
            android:gravity="center|center_vertical"
            android:text="@string/ah_no_error_message_crikey_" >
        </TextView>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/nearest_open_crag_details_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:visibility="gone" >

        <TextView
            android:id="@+id/name_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/crag_list_spacer"
            android:singleLine="true"
            android:text="@string/list_view_name_string"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/distance_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@id/name_text"
            android:layout_marginLeft="@dimen/crag_list_spacer"
            android:layout_marginRight="@dimen/crag_list_spacer"
            android:singleLine="true"
            android:text="@string/list_view_distance_string"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/description_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/distance_text"
            android:layout_marginLeft="@dimen/crag_list_spacer"
            android:layout_marginRight="@dimen/crag_list_spacer"
            android:ellipsize="end"
            android:singleLine="true"
            android:text="@string/crag_description"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <Button
            android:id="@+id/nearest_crag_btn_details"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/description_text"
            android:layout_below="@+id/description_text"
            android:layout_marginTop="10dp"
            android:clickable="true"
            android:text="@string/open_details" />
    </RelativeLayout>

</LinearLayout>

Спасибо заранее


person Paul D'Ambra    schedule 24.09.2012    source источник
comment
Вероятно, это не решение вашей проблемы, но почему вы используете 3 RelativeLayouts? Только один может быть лучше   -  person Jose_GD    schedule 18.09.2013


Ответы (2)


Он не игнорирует ваши настройки

прочитайте здесь http://developer.android.com/guide/practices/ui_guidelines/widget_design.html

Если в девятом патче фона вашего виджета есть какие-либо неотъемлемые отступы, вы должны соответственно добавить к minWidth и minHeight.

person slashmili    schedule 13.11.2012
comment
На моем макете нет фоновой девятки, и независимо от того, какие minWidth и minHeight я указываю, виджет выглядит так, как на скриншоте. Итак, minWidth и minHeight игнорируются или происходит что-то еще? - person Paul D'Ambra; 14.11.2012

Вам нужно применить тот же minHeight или minWidth к дочернему элементу (выглядит отсталым, не так ли?)

Настройки в appwidget-provider работают, если вы настроите те же настройки для детей, в моем случае это:

<?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:padding="@dimen/widget_margin"
    android:background="#525252" 
    android:minWidth="486dp"
    android:minHeight="144dp">
person slashmili    schedule 28.11.2012