我有一个奇怪的问题。我将Widget布局的高度改为200dp,以减少智能手机上的空间为2个单元格。但是当我想把它放在屏幕上时,它总是保留3个单元格,并把小部件放在3个单元格的中间。Android 2.3你可以在系统外改变Widget的大小。当我这样做,我得到小部件2单元没有任何布局丢失。
你有什么想法吗?
Stefan//编辑我添加了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>
您应该以另一种方式创建小部件布局。在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>
我就是这么做的
你试过将高度设置为146dp吗?
来自文档:
因为主屏幕的布局方向(因此,单元格)大小)可以改变,根据经验,您应该假设最坏的情况单元格的高度和宽度为74像素。然而,你必须从最后一个维度减去2来解释任何在像素计数中出现的整数舍入错误。找到你的最小宽度和高度的密度无关像素(dp),使用这个公式:
(cell数* 74)- 2
按照这个公式,你应该使用72dp作为一个单元格的高度,294 dp作为四个单元格的宽度。
正如你在这里看到的http://developer.android.com/guide/practices/ui_guidelines/widget_design.html#sizes一个单元格的高度是80像素,宽度是100所以如果你想要2个单元格,你应该把200改成160