Android Widget 保留 3 个单元格而不是 2 个单元格的高度

发布于 2024-12-02 18:01:23 字数 4233 浏览 2 评论 0原文

我有一个奇怪的问题。 我将 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>

i have a strange problem.
I changed my Widget Layout to a height of 200dp to reduce the space to 2 Cells on the smartphone. But when i want to place it on the screen it always reserve 3 Cells and place the widget in the middle of the 3 Cells.
Width Android 2.3 you can change the size of the Widget out of the System. When i do that i get the Widget to 2 Cells without any layout lost.

Do you have any ideas?

Stefan

//EDIT I added the XML Code

<?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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花海 2024-12-09 18:01:23

您应该以另一种方式创建小部件布局。在 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>

这就是我的做法。

You should create widget layout in another way. Inside xml folder create widget provider

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

then inside layout folder create layout without width and height specification

    <?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>

this is how I did it.

无需解释 2024-12-09 18:01:23

您是否尝试过将高度设置为 146dp ?

来自文档

因为主屏幕的布局方向(因此,单元格
尺寸)可以改变,根据经验,你应该假设最坏的情况
单元格高度宽度的单元格大小为 74 像素。然而,
您必须从最终尺寸中减去 2 以考虑任何
像素计数中出现的整数舍入误差。寻找您的
与密度无关的像素 (dp) 的最小宽度和高度,使用此
公式:

(单元格数量 * 74)- 2

根据此公式,对于一个单元格的高度,您应该使用 72 dp,对于四个单元格的宽度,应使用 294 dp。

Have you tried setting the height to 146dp?

From the documentation:

Because the Home screen's layout orientation (and thus, the cell
sizes) can change,as a rule of thumb, you should assume the worst-case
cell size of 74 pixels for the height and width of a cell. However,
you must subtract 2 from the final dimension to account for any
integer rounding errors that occur in the pixel count. To find your
minimum width and height in density-independent pixels (dp), use this
formula:

(number of cells * 74) - 2

Following this formula, you should use 72 dp for a height of one cell, 294 dp and for a width of four cells.

橪书 2024-12-09 18:01:23

正如您可以在此处阅读 http://developer.android.com/guide/ Practices/ui_guidelines/widget_design.html#sizes 一个单元格的高度为 80 像素,宽度为 100,因此如果您想要 2 个单元格,则应将 200 更改为 160

As you can read here http://developer.android.com/guide/practices/ui_guidelines/widget_design.html#sizes one cell in height takes 80 pixels and 100 in width so you should change 200 to 160 if you want 2 cells

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文