如何删除3d touch添加3d widgett

下次自动登录
现在的位置:
& 综合 & 正文
如何在自己的程序中添加appWidget
widget宿主端进程(比如Launcher) :AppWidgetService AppWidgetManager
AppWidgetHostView
AppWidgetHost
widget客户端进程:RmoteViews
AppWidgetProviderInfo
AppWidgetProvider(extends BroadcastReceiver)
2.相关类介绍
2.1.AppWidgetService.java
这是widget framework的核心类,是系统service之一,它承担着所有widget的
管理工作。Widget安装,删除,更新等等都需要经过AppWidgetService.它是开机就启动的.
在开机过程中,java层进程System Server启动后(这个进程管理着所有的系统service, 例如
activity manager service, windows manager service, power manager service等),会创建
AppWdigetService的实例,并调用它的SystemReady()方法,在这个方法里,它做了三件事:
1)遍历所有的安装包,找到符合条件ACTION=ACTION_APPWIDGET_UPDATE和&meta-data android:name="android.appwidget.provider"/&的intent receiver,解析相关信息,保存到本地数据成员中。
2)读取本地文件数据:/data/system/appwidgets.xml,所有已安装到桌面的widget的信息都保存在这个文件里。读出来,也保存到本地数据成员里。
3)注册了三个消息:ACTION_BOOT_COMPLETED(系统启动到桌面就会发送此消息),ACTION_PACKAGE_ADDED(有新APK包安装到系统),ACTION_PACKAGE_REMOVED(有APK包被删除)。当系统启动到桌面后,AppWidgetService接收到了ACTION_BOOT_COMPLETED消息,它会去检查本地数据成员,如果有已经安装到桌面的widget,它会上发ACTION_APPWIDGET_ENABLED和ACTION_APPWIDGET_UPDATE消息。如果有widget设置了updatePeriodMillis的属性,它就会开始计时(这个是通过AlarmManager来实现的),到时间时,就会再次上发ACTION_APPWIDGET_UPDATE消息。
2.2AppWidgetManager
是AppWidgetService的客户端代理,是标准的AIDL通讯。IAppWidgetService.java
2.3.RemoteViews
并不是一个真正的View,它没有实现View的接口,而只是一个用于描述View的实体。比如:创建View需要的资源ID和各个控件的事件响应方法。RemoteViews会通过进程间通信机制传递给AppWidgetHost。
2.4.AppWidgetHostView
是真正的View,但它只是一个容器,用来容纳实际的AppWidget的View。这个AppWidget的View是根据RemoteViews的描述来创建。这是在updateAppWidget里做的:
remoteViews.apply创建了实际的View
2.5.AppWidgetHost
是真正容纳AppWidget的地方,它的主要功能有两个:
o 监听来自AppWidgetService的事件:
o 另外一个功能就是创建AppWidgetHostView。
3.在自己的程序中添加appWidget
如何创建一个AppWidget网上有大量的资料和代码,我这里就不赘述了。
下面来看看如何在自己的程序中添加appWidget(仿Launcher)
一共有三个源文件
LauncherAppWidgetHostView扩展了AppWidgetHostView,实现了对长按事件的处理。
public class LauncherAppWidgetHostView extends AppWidgetHostView {
private LayoutInflater mI
private Context mC
private int mPreviousO
public LauncherAppWidgetHostView(Context context) {
super(context);
mContext =
mLongPressHelper = new CheckLongPressHelper(this);
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
protected View getErrorView() {
return mInflater.inflate(R.layout.appwidget_error, this, false);
public void updateAppWidget(RemoteViews remoteViews) {
mPreviousOrientation = mContext.getResources().getConfiguration().
super.updateAppWidget(remoteViews);
public boolean orientationChangedSincedInflation() {
int orientation = mContext.getResources().getConfiguration().
if (mPreviousOrientation != orientation) {
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true :Consume any touch events for ourselves after longpress is triggered
// Otherwise continue letting touch events fall through to children
LauncherAppWidgetHost扩展了AppWidgetHost,这里只是重载了onCreateView,创建LauncherAppWidgetHostView的实例。
public class LauncherAppWidgetHost extends AppWidgetHost {
public LauncherAppWidgetHost(Context context, int hostId) {
super(context, hostId);
protected AppWidgetHostView onCreateView(Context context, int appWidgetId,
AppWidgetProviderInfo appWidget) {
return new LauncherAppWidgetHostView(context);
public void stopListening() {
super.stopListening();
clearViews();
HelloAcitvity.java
public class HelloActivity extends Activity {
private ArrayList&AppWidgetProviderInfo& mWidgets = new ArrayList&AppWidgetProviderInfo&();
private LauncherAppWidgetHost mAppWidgetH
private PackageManager mPackageM
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the list of widgets
updatePackages();
mPackageManager = this.getPackageManager();
mAppWidgetHost = new LauncherAppWidgetHost(this, 1001);
//startListening AppWidgetChanged
mAppWidgetHost.startListening();
int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
final AppWidgetProviderInfo widgetInfo = mWidgets.get(4);
//获取RemoteView描述的对应的View
LauncherAppWidgetHostView hostView = (LauncherAppWidgetHostView) mAppWidgetHost.createView(
this, appWidgetId, widgetInfo);
final LinearLayout layout2 = new LinearLayout(this);
layout2.setOrientation(LinearLayout.VERTICAL);
layout2.addView(hostView);
setContentView(layout2);
// 取自 AppsCustomizePagedView
public void updatePackages() {
mWidgets.clear();
List&AppWidgetProviderInfo& widgets =
AppWidgetManager.getInstance(this).getInstalledProviders();
// Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
// List&ResolveInfo& shortcuts =
// mPackageManager.queryIntentActivities(shortcutsIntent, 0);
for (AppWidgetProviderInfo widget : widgets) {
if (widget.minWidth & 0 && widget.minHeight & 0) {
Log.d("yzy", widget.label);
mWidgets.add(widget);
// mWidgets.addAll(shortcuts);
&&&&推荐文章:
【上篇】【下篇】求教,怎么使用3D touch【iphone7吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:550,060贴子:
求教,怎么使用3D touch收藏
我已经把3D touch打开了,但不懂怎么用,像图2这样,求各位大神教下。
「天猫手机馆」-正品手机品牌旗舰店直销,新品现货,品类齐全,售后无忧,正品低价服务优!网购手机,来「天猫手机馆」让人放心的手机商城.&&惠&&聚各款热卖机型!分期付款无压力!
我已经把3D touch打开了,但不懂怎么用,像图2这样,求各位大神教下。
我已经把3D touch打开了,但不懂怎么用,像图2这样,求各位大神教下。
我已经把3D touch打开了,但不懂怎么用,像图2这样,求各位大神教下。
用力摁呀.....
居然调强!赶紧用锤子敲吧
用力点,不想用力就把力度级别调低点
用力按,出现删除呀…
用力按,出现删除呀…求教
我会了 楼主 轻轻的按一下 出现白方框在用力按一下
用力按,出现删除呀…
调到弱,用力按,怕毛
艾玛 愁死我了。。调成弱的。你轻按住,是删除,用力按住是3D
我的天。。。。。。
难到是6改7
在水还是手机有问题
那你就调弱一点
下去那一瞬间用力 不是长按
直接用力一按就是了,出来删除说明你根本没用力
3D Touch需要用脚踩才行
用力按,使劲点就可以的
终于搞懂这些高科技了,原来是手指按住图标,稍微用点力,就会像电脑上鼠标右键点击图标那样出现菜单供你选择!真的是付款购物很方便,居家旅行必备,前提是支付宝啊、微信什么的有钱才行
用力按图标咯
用拇指肚用力按图标,再不行,要么你手机坏了要么你水经验,实在不行你去用力按下拉状态栏里面的闪光灯那个图标找手感,那个不会出现删除
登录百度帐号推荐应用iOS 的 Widget (二) - CSDN博客
iOS 的 Widget (二)
—-&&&&&&&&&&—-
聊下 在项目里面 做展开和折叠
这个功能在iOS10 才出现的
并且样式 跟 iOS10 以下 是有点不一样的,
iOS9 的左边 是留了一定的间距,而iOS10 是在屏幕的两边留了大概 7 的宽度。
1.首先 TestWidgetDemo 的 ViewController.m 里面加入一个控制器 用于控制是否展开和折叠
NSUserDefaults *def = [[NSUserDefaults alloc] initWithSuiteName:@"group.xixi"];
[def setObject:@"xixi" forKey:@"name"];
[def setObject:@18 forKey:@"age"];
[def setBool:NO forKey:@"isExpansion"];
[def synchronize];
UILabel *leftLabel = [[UILabel alloc] init];
leftLabel.frame = CGRectMake(30, 50, 50, 50);
leftLabel.text = @"折叠";
leftLabel.textColor = [UIColor blackColor];
[self.view addSubview:leftLabel];
UISwitch *sh = [[UISwitch alloc] initWithFrame:CGRectMake(CGRectGetMaxX(leftLabel.frame), 50, 100, 40)];
[sh addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:sh];
UILabel *rightLabel = [[UILabel alloc] init];
rightLabel.frame = CGRectMake(CGRectGetMaxX(sh.frame) + 10, 50, 50, 50);
rightLabel.text = @"展开";
rightLabel.textColor = [UIColor blackColor];
[self.view addSubview:rightLabel];
-(void)switchAction:(UISwitch *)switchArg
NSUserDefaults *def = [[NSUserDefaults alloc] initWithSuiteName:@"group.xixi"];
[def setBool:switchArg.on forKey:@"isExpansion"];
[def synchronize];
![图11](http://img.blog.csdn.net/24522)
2.**在TodayViewController.m 里面 我加入了一个 tableView**
- (void)viewDidLoad {
[super viewDidLoad];
NSUserDefaults *def = [[NSUserDefaults alloc] initWithSuiteName:@"group.xixi"];
nameStr = [def objectForKey:@"name"];
age = [def objectForKey:@"age"];
isExpansion = [def boolForKey:@"isExpansion"];
_tableView = [[UITableView alloc] init];
_tableView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
_tableView.backgroundColor = [UIColor greenColor];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
[self setViewModel];
(_tabelview 的 delegate 的方法就不贴出来了)
3.**通过 setViewModel
这个方法来控制
展开或者折叠**
-(void) setViewModel
if (ios_version &= 10)
if (isExpansion)
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeCompact];
self.preferredContentSize = CGSizeMake(0, tableview_MaxHeight);
(iOS10 是通过setWidgetLargestAvailableDisplayMode 这个方法来控制 展开和折叠,所以要进行一个版本的判断,而iOS10 以下 还是用回去 preferredContentSize 来判断)
4.**设置了setWidgetLargestAvailableDisplayMode之后会触发 下面这个方法**
//ios10 下才有这个方法
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize
if (activeDisplayMode == NCWidgetDisplayModeCompact)
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 105)
_tableView.frame = CGRectMake(0, 0, self.view.frame.size.width, 105)
self.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, tableview_MaxHeight)
_tableView.frame = CGRectMake(0, 0, self.view.frame.size.width, tableview_MaxHeight)
(这里顺带说下 竟然你设置了 展开或者折叠的模式之后 那么你也要相应的 把
preferredContentSize 和
tableView 的大小也设置,不然你是看不到效果。)
补充下 : 怎样让iOS9以下的 Widget 的大小跟iOS10 一样,这样就不用做两套东西
- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets
return UIEdgeInsetsZ
!!!!!!!!好吧 下面看效果!!!!!!!!
默认不展开
展开后效果
本文已收录于以下专栏:
相关文章推荐
iOS10.0发布啦(貌似过去有点时间了吧 - -),在宏观带给我们使用体验的提升之外,更多的是带给iOS开发者一定的欣喜。
因为我们又要学习新东西来适配10啦。
博文所说的Widget并不是...
widget从iOS8发布到现在已经很久了,刚出来的时候我也了解过,但是一直没有用,最近我的一个APP要用到,在这里我就整理一下,详细说明一下,希望大家喜欢!
1.app extensio...
iOS extension的出现,方便了用户查看应用的服务,比如用户可以在Today的widgets中查看应用的简略信息,然后点击进入相关的应用界面。
暂且不表网络上现有的widget文...
widget这个小插件不知道有多少人习惯使用?又或者有多少使用iphone手机的用户知道这东西的存在?好了,不说废话了;既然公司有这需求,小编也只能去研究了!下面来和大家介绍小编研究成果!查询了网上的...
创建一个TestWidgetDemo 项目
二. 创建一个widget
(方式如下)三. 跟着我们要开启共享App Group
(因为要通过widget 这个group ...
今天学习了一下小部件,记录下学习的内容。
一、如何创建一个简单的小部件
1.先新建一个小部件类AppWidget 继承 AppWidgetProvider,其实AppWidgetProvider,就是...
怎么为app添加一个窗口小部件?本文介绍了widget创建,更新及widget点击事件的基本步骤,可以从中熟悉widget的基本操作
如Twitter客户端或者HTC的日历应用,可以添加大小不同的Widget。此疑问。
原来如此简单,只是我原来不会罢了。
首先在AndroidManifest.xml中太假多个接收器:
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)3d touch这里的联系人怎么去掉【ios11吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:73,262贴子:
3d touch这里的联系人怎么去掉收藏
3d touch这里的联系人怎么去掉
每对新人结婚成功的那一刻,送礼最多的吧友可以获得本次求婚的“月老”称号和成就,
登录百度帐号推荐应用

我要回帖

更多关于 3dtouch widget 的文章

 

随机推荐