Android主屏幕小部件(图标,标签 - 样式)

时间:2010-04-16 08:39:55

标签: android android-widget

我正在尝试创建一个可放置在android主屏幕上的图标/小部件(1个单元格x 1单元格)。该小部件的外观和行为与android中的其他标准快捷方式完全相同。它将有一个图标,在该标签下,它可以通过轨迹球(高亮显示)进行选择,它将在选择/点击时突出显示。

如何创建此主屏幕小部件?

我是否必须使用code / xml自己创建窗口小部件,或者是否有一些标准的xml,样式,主题和代码可用于确保窗口小部件与其他主屏幕窗口小部件具有相同的样式/主题?

我目前有以下

RES /抽拉/ corners.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Corners">
    <stroke android:width="4dp" android:color="#CC222222"  />
    <padding android:left="4dp" android:top="1dp" android:right="4dp" android:bottom="1dp" />
    <corners android:radius="4dp" />
</shape>

RES /布局/ widget.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Widget"
    android:layout_width="72dip"
    android:layout_height="72dip"
    android:orientation="vertical"
    android:focusable="true"
    android:gravity="center_horizontal"
    style="@android:style/Widget"   
    >

    <ImageView
        android:id="@+id/WidgetIcon"
        android:src="@drawable/icon"
        android:layout_width="fill_parent" 
        android:layout_height="50dip"
        android:paddingTop="3dip"
        android:gravity="center"
        />

    <TextView
        android:id="@+id/WidgetLabel"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="@string/app_name"
        android:textSize="15dip"
        android:background="@drawable/corners"
        />

</LinearLayout>

生成的窗口小部件看起来很接近,但它不可选择,单击时它不会突出显示,并且标签不完全位于正确的位置或正确的样式。

任何想法,如果有正确的方法,或者我应该继续努力,直到我离我更近?

2 个答案:

答案 0 :(得分:9)

“执行此操作的正确方法”是创建快捷方式,而不是尝试使用应用小部件来模仿它。核心Android团队(特别是Romain Guy)在[android-developers]讨论列表such as上反复指出:

  

小部件应该看起来像小部件,而不是   喜欢捷径。主要原因是   绝对没有保证   关于快捷方式的样子。   其他设备(尤指带有设备的设备   自定义系统UI,如MOTOBLUR或HTC   感觉)可能有不同的外观和   感觉。或者在Android的下一次更新中   我们可能会改变捷径的方式   呈现。

答案 1 :(得分:1)

通过引用系统属性android:attr/selectableItemBackground,使您的项目与系统外观一致并不难。例如,如果您想在窗口小部件中使用适当的突出显示等“可选”,那么只需执行

<ImageView
    ...
    android:background="?android:attr/selectableItemBackground"
    ...
    />

android_sdk_path/platforms/android-x中有很多。快乐挖!

编辑:我后来发现这个简单的属性不适用于SDK&lt; V11。所以我现在知道的最好方法是下载appwidget模板包并使用它。