当前位置: 编程技术>移动开发
本页文章导读:
▪试着翻译官方文档的widget稿子(未完成) 试着翻译官方文档的widget文章(未完成)
原地址:http://developer.android.com/guide/topics/appwidgets/index.html我拙劣的英文加上谷歌翻译。。。。=============LET`S ROLL===============================---------------.........
▪ listview的非一般属性 listview的特殊属性
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:id="@+id/mlist"
android:listSelector="#00000000"/>
andro.........
▪ TextView跑马灯成效 TextView跑马灯效果
android:ellipsize="marquee"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:focusableInTouchMode="true" android:scrollHorizontally="true"但是你需要自定义.........
[1]试着翻译官方文档的widget稿子(未完成)
来源: 互联网 发布时间: 2014-02-18
试着翻译官方文档的widget文章(未完成)
原地址:
http://developer.android.com/guide/topics/appwidgets/index.html
我拙劣的英文加上谷歌翻译。。。。
=============LET`S ROLL===============================
------------------------------------------
widget
应用程序Widgets是可以嵌入在其他应用程序(如主屏幕)的小型应用程序视图,并接受定期更新。在用户界面,这些views被称为小工具,你可以使用App Widget provider发布应用部件。一个能够容纳其他应用程序的小工具的应用程序组件,被称为App Widget host。下面是音乐小部件。
------------------------------------------
The Basics
要建立一个小部件,你需要如下东东:
AppWidgetProviderInfo 对象
描述Widget的metadata信息, 比如App Widget的layout, update frequency(升级频率), 还有AppWidgetProvider类. 这个东东应该定义在一个xml文件中。(我注:res/xml)
实现AppWidgetProvider小部件提供者
在监听广播的基础上,定义widget的基本方法,允许你编写widget的程序接口。
通过此类,你可以收听到这个widget被updated, enabled, disabled and deleted的广播。
View layout
在xml文件中定义的widget初始布局(我注:res/layout)。
还有,你可以编写一个widget configuration(设置) activity。当用户第一次建立这个widget时,会跳转到这个activity,来配置activity(我注:类似于活动壁纸的配置)。
以下部分就是描述怎样实现这些组件
----------------------------------------------
在Manifest中声明小部件
第一步 在Manifest中声明小部件。举例:
<receiver>元素必须有name属性,才能为widget指定provider
<intent-filter>元素必须有带name属性的<action>元素。这样才能指定接收到更新widget的广播。这是你唯一需要明确声明的的广播。有必要的话,AppWidgetManager会自动的发送所有其他widget的广播给AppWidgetProvider。
<meta-data> 元素指定了AppWidgetProviderInfo资源并要求如下属性:
android:name - 指定 metadata 名称. 使用android.appwidget.provider来标识描述AppWidgetProviderInfo的数据。
android:resource - 指定AppWidgetProviderInfo资源的位置.
(看来要把原文附上了。土逼啃啼妞。。。。。)
---------------------------------------
Adding the AppWidgetProviderInfo Metadata
AppWidgetProviderInfo 定义了widget的一些必须的数值,比如最小长宽,初始化的布局,更新频率(我注:Android 1.6以后不可用,强制最小更新时间30分钟以上,可以自己写service,注意省电),(可选的)配置activity。
在res/xml用一个xml文件中的<appwidget-provider>元素来定制AppWidgetProviderInfo。
举例:
这是<appwidget-provider>中属性的概述
minWidth和minHeight定义了widget在主屏上默认占用的宽和高。默认主屏是由定义好长宽的单元格组成的。如果最小长宽不能匹配单元格,widget坐标会包含最近的一个单元格。
关于widget的大小信息可以参见App Widget Design Guidelines
注:为了能让你的widget在竖屏的设备工作,widget的大小不应大于4*4单元。
minResizeWidth和minResizeHeight指定了widget的绝对最小尺寸。这两个值应该比不可用或者非法的值小。这两个属性允许用户让widget的大小比指定的最小值还要小。在android3.1中有介绍。
AApp Widget Design Guidelines 查看更多关于widget尺寸的信息。
updatePeriodMillis属性决定了widget的AppWidgetProvider的update()方法多长时间被回调一次。为了电池的寿命我们建议越少更新越好,最好间隔大于1小时。你可以让用户来配置多长时间更新一次。
注:如果在休眠时遇到了updatePeriodMillis指定更新的时候,设备会被唤醒来更新。
如果更新间隔不小于1小时,那么不会引起电池寿命问题。如果你想在系统休眠时不更新,可以用alarm机制来更新,这样不会唤醒设备。如果你要这样做,设置一个AppWidgetProvider能收到的带intent的alarm。将alarm类型设置成 ELAPSED_REALTIME或RTC,这样只有系统在活动状态才能传递alarm。然后把updatePeriodMillis设置为0(不更新)。
initialLayout属性指向的布局资源决定了widget的布局。
configure属性决定了添加widget时用户设置widget的activity,这是可选的。(可参考[url=http://developer.android.com/guide/topics/appwidgets/index.html#Configuring][/url])
previewImage属性指定了当用户在widget列表里选择时,widget的预览图。不提供的话,会用应用的图标代替。这个属性对应了 AndroidManifest.xml中widget 的provider
的android:previewImage属性。更多可参考Android 3.0的介绍。
autoAdvanceViewId属性指定了小部件建立时自动升级的子view的view ID。(我注:可能有误,因为没用过这个东东)。
resizeMode属性指定了widget可否被重设大小。你可以用这个属性让小部件在桌面上横、竖或都能重设大小。用户可以按住小部件,横或者竖拖动来重设小部件在网格中的大小。
resizeMode属性包括“horizontal” "vertical""none""horizontal|vertical"
Android 3.1中有介绍。
查看AppWidgetProviderInfo 类来获得更多详细信息。
---------------------------------------
建立widget的布局
你必须在res/layout中定义小部件的初始布局。你可以使用如下控件,但请先阅读
App Widget Design Guidelines.
你必须知道小部件的布局都是基于RemoteViews,它并不支持所有种类的布局或者控件。一个RemoteViews对象(也可一说widget)支持如下类型的布局:
FrameLayout
LinearLayout
RelativeLayout
和如下类型的控件:
AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper
上述以外都不支持(我注:重要。但是随着Android的升级,上述列表不断的在增加。)
为小部件添加边距
为了不和其他小部件以及屏幕接上,你应该为小部件添加边距。
在Android4.0中,系统会自动给小部件们添加边距。为了利用这个推荐的功能,你可以把targetSdkVersion设为14以上。(我注:扯淡。。。。)
为了早期的平台,写一个带有自定义边距的单独的布局是相对容易的,并且对于4.0以上的版本没有额外的边距:
设置targetSdkVersion为14以上。建立下面布局中的其中一个,带有相关边距尺寸的:
建立两个尺寸资源,一个在res/values/为了Android4.0以前的版本,一个在res/values-v14/,没有额外边距的Android4.0小部件。
res/values/dimens.xml:
<dimen name="widget_margin">8dp</dimen>
res/values-v14/dimens.xml:
<dimen name="widget_margin">0dp</dimen>
另一种方法是在不同的背景图片上直接作出边距,然后适应不同的版本。
---------------------------------------
使用AppWidgetProvider类
AppWidgetProvider类继承自BroadcastReceiver,用来处理widget的广播。
AppWidgetProvider只接受关于widget的广播,比如 更新,删除,可用,不可用。当收到广播后,会回调下列方法:
onUpdate()
此方法根据AppWidgetProviderInfo定义的updatePeriodMillis来更新widget。当用户添加widget时,也会调用这个方法。所以这个方法应该实现必要的安装,设置时间处理句柄,启动service等。但是,如果你已经定义了widget的配置activity,那么添加widget时不会调用这个方法,之后的更新才会调用。
onDeleted(Context, int[])
This is called every time an App Widget is deleted from the App Widget host.
onEnabled(Context)
This is called when an instance the App Widget is created for the first time. For example, if the user adds two instances of your App Widget, this is only called the first time. If you need to open a new database or perform other setup that only needs to occur once for all App Widget instances, then this is a good place to do it.
onDisabled(Context)
This is called when the last instance of your App Widget is deleted from the App Widget host. This is where you should clean up any work done in onEnabled(Context), such as delete a temporary database.
onReceive(Context, Intent)
This is called for every broadcast and before each of the above callback methods. You normally don't need to implement this method because the default AppWidgetProvider implementation filters all App Widget broadcasts and calls the above methods as appropriate.
原地址:
http://developer.android.com/guide/topics/appwidgets/index.html
我拙劣的英文加上谷歌翻译。。。。
=============LET`S ROLL===============================
------------------------------------------
widget
应用程序Widgets是可以嵌入在其他应用程序(如主屏幕)的小型应用程序视图,并接受定期更新。在用户界面,这些views被称为小工具,你可以使用App Widget provider发布应用部件。一个能够容纳其他应用程序的小工具的应用程序组件,被称为App Widget host。下面是音乐小部件。
------------------------------------------
The Basics
要建立一个小部件,你需要如下东东:
AppWidgetProviderInfo 对象
描述Widget的metadata信息, 比如App Widget的layout, update frequency(升级频率), 还有AppWidgetProvider类. 这个东东应该定义在一个xml文件中。(我注:res/xml)
实现AppWidgetProvider小部件提供者
在监听广播的基础上,定义widget的基本方法,允许你编写widget的程序接口。
通过此类,你可以收听到这个widget被updated, enabled, disabled and deleted的广播。
View layout
在xml文件中定义的widget初始布局(我注:res/layout)。
还有,你可以编写一个widget configuration(设置) activity。当用户第一次建立这个widget时,会跳转到这个activity,来配置activity(我注:类似于活动壁纸的配置)。
以下部分就是描述怎样实现这些组件
----------------------------------------------
在Manifest中声明小部件
第一步 在Manifest中声明小部件。举例:
<receiver android:name="ExampleAppWidgetProvider" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info" /> </receiver>
<receiver>元素必须有name属性,才能为widget指定provider
<intent-filter>元素必须有带name属性的<action>元素。这样才能指定接收到更新widget的广播。这是你唯一需要明确声明的的广播。有必要的话,AppWidgetManager会自动的发送所有其他widget的广播给AppWidgetProvider。
<meta-data> 元素指定了AppWidgetProviderInfo资源并要求如下属性:
android:name - 指定 metadata 名称. 使用android.appwidget.provider来标识描述AppWidgetProviderInfo的数据。
android:resource - 指定AppWidgetProviderInfo资源的位置.
(看来要把原文附上了。土逼啃啼妞。。。。。)
---------------------------------------
Adding the AppWidgetProviderInfo Metadata
AppWidgetProviderInfo 定义了widget的一些必须的数值,比如最小长宽,初始化的布局,更新频率(我注:Android 1.6以后不可用,强制最小更新时间30分钟以上,可以自己写service,注意省电),(可选的)配置activity。
在res/xml用一个xml文件中的<appwidget-provider>元素来定制AppWidgetProviderInfo。
举例:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical"> </appwidget-provider>
这是<appwidget-provider>中属性的概述
minWidth和minHeight定义了widget在主屏上默认占用的宽和高。默认主屏是由定义好长宽的单元格组成的。如果最小长宽不能匹配单元格,widget坐标会包含最近的一个单元格。
关于widget的大小信息可以参见App Widget Design Guidelines
注:为了能让你的widget在竖屏的设备工作,widget的大小不应大于4*4单元。
minResizeWidth和minResizeHeight指定了widget的绝对最小尺寸。这两个值应该比不可用或者非法的值小。这两个属性允许用户让widget的大小比指定的最小值还要小。在android3.1中有介绍。
AApp Widget Design Guidelines 查看更多关于widget尺寸的信息。
updatePeriodMillis属性决定了widget的AppWidgetProvider的update()方法多长时间被回调一次。为了电池的寿命我们建议越少更新越好,最好间隔大于1小时。你可以让用户来配置多长时间更新一次。
注:如果在休眠时遇到了updatePeriodMillis指定更新的时候,设备会被唤醒来更新。
如果更新间隔不小于1小时,那么不会引起电池寿命问题。如果你想在系统休眠时不更新,可以用alarm机制来更新,这样不会唤醒设备。如果你要这样做,设置一个AppWidgetProvider能收到的带intent的alarm。将alarm类型设置成 ELAPSED_REALTIME或RTC,这样只有系统在活动状态才能传递alarm。然后把updatePeriodMillis设置为0(不更新)。
initialLayout属性指向的布局资源决定了widget的布局。
configure属性决定了添加widget时用户设置widget的activity,这是可选的。(可参考[url=http://developer.android.com/guide/topics/appwidgets/index.html#Configuring][/url])
previewImage属性指定了当用户在widget列表里选择时,widget的预览图。不提供的话,会用应用的图标代替。这个属性对应了 AndroidManifest.xml中widget 的provider
的android:previewImage属性。更多可参考Android 3.0的介绍。
autoAdvanceViewId属性指定了小部件建立时自动升级的子view的view ID。(我注:可能有误,因为没用过这个东东)。
resizeMode属性指定了widget可否被重设大小。你可以用这个属性让小部件在桌面上横、竖或都能重设大小。用户可以按住小部件,横或者竖拖动来重设小部件在网格中的大小。
resizeMode属性包括“horizontal” "vertical""none""horizontal|vertical"
Android 3.1中有介绍。
查看AppWidgetProviderInfo 类来获得更多详细信息。
---------------------------------------
建立widget的布局
你必须在res/layout中定义小部件的初始布局。你可以使用如下控件,但请先阅读
App Widget Design Guidelines.
你必须知道小部件的布局都是基于RemoteViews,它并不支持所有种类的布局或者控件。一个RemoteViews对象(也可一说widget)支持如下类型的布局:
FrameLayout
LinearLayout
RelativeLayout
和如下类型的控件:
AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
ViewFlipper
ListView
GridView
StackView
AdapterViewFlipper
上述以外都不支持(我注:重要。但是随着Android的升级,上述列表不断的在增加。)
为小部件添加边距
为了不和其他小部件以及屏幕接上,你应该为小部件添加边距。
在Android4.0中,系统会自动给小部件们添加边距。为了利用这个推荐的功能,你可以把targetSdkVersion设为14以上。(我注:扯淡。。。。)
为了早期的平台,写一个带有自定义边距的单独的布局是相对容易的,并且对于4.0以上的版本没有额外的边距:
设置targetSdkVersion为14以上。建立下面布局中的其中一个,带有相关边距尺寸的:
<FrameLayout 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:orientation="horizontal" android:background="@drawable/my_widget_background"> … </LinearLayout> </FrameLayout>
建立两个尺寸资源,一个在res/values/为了Android4.0以前的版本,一个在res/values-v14/,没有额外边距的Android4.0小部件。
res/values/dimens.xml:
<dimen name="widget_margin">8dp</dimen>
res/values-v14/dimens.xml:
<dimen name="widget_margin">0dp</dimen>
另一种方法是在不同的背景图片上直接作出边距,然后适应不同的版本。
---------------------------------------
使用AppWidgetProvider类
AppWidgetProvider类继承自BroadcastReceiver,用来处理widget的广播。
AppWidgetProvider只接受关于widget的广播,比如 更新,删除,可用,不可用。当收到广播后,会回调下列方法:
onUpdate()
此方法根据AppWidgetProviderInfo定义的updatePeriodMillis来更新widget。当用户添加widget时,也会调用这个方法。所以这个方法应该实现必要的安装,设置时间处理句柄,启动service等。但是,如果你已经定义了widget的配置activity,那么添加widget时不会调用这个方法,之后的更新才会调用。
onDeleted(Context, int[])
This is called every time an App Widget is deleted from the App Widget host.
onEnabled(Context)
This is called when an instance the App Widget is created for the first time. For example, if the user adds two instances of your App Widget, this is only called the first time. If you need to open a new database or perform other setup that only needs to occur once for all App Widget instances, then this is a good place to do it.
onDisabled(Context)
This is called when the last instance of your App Widget is deleted from the App Widget host. This is where you should clean up any work done in onEnabled(Context), such as delete a temporary database.
onReceive(Context, Intent)
This is called for every broadcast and before each of the above callback methods. You normally don't need to implement this method because the default AppWidgetProvider implementation filters all App Widget broadcasts and calls the above methods as appropriate.
[2] listview的非一般属性
来源: 互联网 发布时间: 2014-02-18
listview的特殊属性
android:cacheColorHint="#00000000" :滑动无背景色变化
android:listSelector="#00000000" :点击Item无背景色变化
<ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:id="@+id/mlist" android:listSelector="#00000000"/>
android:cacheColorHint="#00000000" :滑动无背景色变化
android:listSelector="#00000000" :点击Item无背景色变化
[3] TextView跑马灯成效
来源: 互联网 发布时间: 2014-02-18
TextView跑马灯效果
但是你需要自定义一个TextView覆盖isFocused方法。fuck
android:ellipsize="marquee" android:focusable="true" android:marqueeRepeatLimit="marquee_forever" android:focusableInTouchMode="true" android:scrollHorizontally="true"
但是你需要自定义一个TextView覆盖isFocused方法。fuck
@Override public boolean isFocused() { return true; }
最新技术文章: