当前位置:  编程技术>移动开发
本页文章导读:
    ▪试着翻译官方文档的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 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的特殊属性
<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跑马灯效果
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;
	}


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3