Android Widget添加自定义控件

本文介绍了如何在Android 4.2.2的Widget中添加自定义控件,如MyAnalogClock。步骤包括在类前添加@RemoteView注解,将控件加入到指定目录,定义和公开属性,以及执行make update-api命令更新接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于Widget设计上的缺陷,目前Widget只支持一下控件:
*FrameLayout
*LinearLayout
*RelativeLayout
*AnalogClock
*Button
*Chronometer
*ImageButton
*ImageView
*ProgressBar
*TextView

如果要增加自定义控件的支持呢,一下以4.2.2为例增加对自定义控件的支持

1.自定义控件例如MyAnalogClock,必须在定义类之前增加@RemoteView标志,并将MyAnalogClock加入到frameworks/base/core/java/android/widget/中,表示是让Widget支持的;

eg:

 

import java.util.TimeZone;


@RemoteView
public class MyAnalogClock extends View {
    private Time mCalendar;

    private Drawable mHourHand;
    private Drawable mMinuteHand;
    private Drawable mSecondHand;
    private Drawable mDial;
    private Drawable mDialCenter;

 

2.如果需要增加自定义控件的属性定义,在frameworks/base/core/res/res/values/attrs.xml中增加属性描述;

eg:


    <declare-styleable name="MyAnalogClock">
        <attr name="my_dial" format="reference"/>
        <attr name="my_hand_hour" format="reference"/>
        <attr name="my_hand_minute" format="reference"/>
        <attr name="my_hand_second" format="reference"/>
        <attr name="my_dial_center" format="reference"/>
    </declare-styleable>

 

3.由于属性需要提供给外界使用,所以需要在frameworks/base/core/res/res/values/public.xml中增加属性的描述;

eg:

  <public type="attr" name="my_dial" id="0x010103cd" />
  <public type="attr" name="my_hand_hour" id="0x010103ce" />
  <public type="attr" name="my_hand_minute" id="0x010103cf" />
  <public type="attr" name="my_hand_second" id="0x010103d0" />
  <public type="attr" name="my_dial_center" id="0x010103d1" />

注意:属性的id一定要是唯一的,需要在<public type="attr"的最后一个id后面逐渐+1;

 

4.由于增加了新接口所以需要执行 make update-api的命令来重新生成frameworks/base/api/current.txt文件,后面可以直接在app和widget中调用该自定义控件了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值