全面讲解Android App Widgets之基本使用(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/renpingqing/article/details/51383106

简介

App Widgets他是一个迷你的Application Views他能嵌入到其他应用程序里(例如:桌面)并且它还能接受一个周期性的更新,所有称她为桌面小部件

可以看到这是一个天气的桌面插件,他上面可以显示时间,日期,天气,同时还有背景,是不是很方便呢,这种部件对新闻类应用,代办事项等这类软件很有帮助,因为我们不需要打开客户端就能获取到信息,同时对于用户是没有时间消耗的,因为他解锁屏幕就看见了,不经意间的~

创建一个App Widgets的一般步骤

AppWidgetProviderInfo

来描述一些Widget的元数据,比如:更新周期,布局,所对应的class灯,是一个xml文件

AppWidgetProvider

我实现它提供一些的接口,比如:Widget的创建,第一次添加,删除等状态,他是一个类参考这里

View Layout

这很容易理解啦,就是要显示的布局,你不告诉他,他怎么知道要显示TextView还是ImageView,对吧

清单文件配置状态广播

因为AppWidgetProvider实际上是一个receiver,你说要不要配置

可选配置:

我们可以设置一个App Widget的配置Activity,他可以在你启动App Widget时提供一些配置

下面我们来创建一个简单的App Widget

布局

这里有个问题就是这里不支持一些输入控件,比如:EditText,它支持的布局有:

FrameLayout
LinearLayout
RelativeLayout
GridLayout

支持的控件有:

AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper

同时也支持ViewStub

添加Widget的margin

通过情况下我们Widget的内容不应该太靠近屏幕的边缘了,所有要设置一个margin,在Android 4.0上他会自动的加上的margin,基于这样的需求,所有我们需要采用如果方法适配这个margin

设置targetSdkVersion为14或者更高

创建一个布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:padding="@dimen/widget_margin">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#f00"
        android:orientation="horizontal">
        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
                  android:text="我是一个最基本的Widget"/>
    </LinearLayout>

</FrameLayout>

创建尺寸资源

res/values/dimens.xml:

<dimen name="widget_margin">8dp</dimen>

res/values-v14/dimens.xml:

<dimen name="widget_margin">0dp</dimen>

使用AppWidgetProvider

这个和使用Activity差不多,如果你要有Activity的一些特性,你既要继承他,这样也是一样的

AppWidgetProvider是一个继承了BroadcastReceiver的类,他用来接受Widget的一些事件,比如:Widget的更新,删除,启用和禁用并回调相应的事件方法

onUpdate()

这个方法是第一次创建Widget(如果设置配置activity他不调用)和到达我们配置的updatePeriodMillis时间时调用,所以在这我们执行一些基本设置,事件处理,或者创建一个临时的Service

创建Widget配置文件

res/xml/basic_widget.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
                    android:minWidth="40dp"
                    android:minHeight="40dp"
                    android:updatePeriodMillis="86400000"
                    android:previewImage="@drawable/ic_launcher"
                    android:initialLayout="@layout/layout_basic_widget"
                    android:widgetCategory="home_screen">
</appwidget-provider>
···

其中我们指定了更新的间隔时间,初始化布局,以及预览图片

## 配置BasicWidget

因为它本身是一个BroadcastReceiver,所以和使用普通的BroadcastReceiver没有什么两样,同样需要配置

```xml
<receiver android:name=".BasicWidget" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/basic_widget" />
</receiver>

其中android:resource就是我们上面创建的的Widget配置文件

到这时候,我们的Widget基本已经完成了,运行代码到手机,就可以在控件列表找到我们只做的控件,添加到桌面上的效果如下:

点击其中的按钮是可以打开我们应用主界面的

Widget尺寸

我们可以在桌面看到很多控件,他们有大小有高有矮,有的甚至还可以在添加的时候动态调整尺寸,那么下面我们就来看看,怎么实现这些功能吧

我看到上面的描述文件里指定了android:minWidth和android:minHeight,必须指定这两个属性,他的最小尺寸是一个格子更新信息参考这里也就是40dp,如果小于这值,他默认就是40dp,其中尺寸的计算公式是70 × n − 30,其中n是暂几格

比如:我要3格,那个尺寸应该为:180dp

minResizeWidth:最小可调整到的尺寸,比如:我最小尺寸是110dp,也就是两格,但是如果设置android:minResizeWidth=”40dp”,可以调整最小为一格,用户添加的时候默认是2格,这个用意的设计就是推荐2格的空间,但是要是桌面有点挤,缩成1格也是可以的。如果大于minResizeWidth将忽略。以上测试代码在这里可以查看

这一篇就到这里,下一篇我们会讲解Widget的高级使用,以及一个使用实例

参考:http://blog.csdn.net/jjwwmlp456/article/details/38466969
http://www.cnblogs.com/devinzhang/archive/2012/01/26/2329790.html
http://developer.android.com/guide/topics/appwidgets/index.html
很详细和官方文档差不多:http://blog.csdn.net/dyllove98/article/details/9199195

猜你喜欢

转载自blog.csdn.net/renpingqing/article/details/51383106
今日推荐