以编程方式创建小部件
Posted
技术标签:
【中文标题】以编程方式创建小部件【英文标题】:Create widget programmatically 【发布时间】:2013-10-07 14:33:46 【问题描述】:据我了解,android 小部件需要 RemoteViews,而不是 View,就像活动一样。
我的问题:有什么办法可以完全避免xml,用java代码构建整个布局?
替代问题:我可以像使用findViewById(int)
一样检索视图吗?例如:LinearLayout linearLayout=(LinearLayout)findViewById(R.id.xxx);
这样我就可以访问基本布局,并随心所欲地进行操作。
谢谢!
【问题讨论】:
您可以使用remoteViews.addView(viewId, nestedView)
添加您的自定义视图
我在看那个,可能这就是我必须使用的..
它会帮助你。developer.android.com/reference/android/widget/…
【参考方案1】:
有什么办法可以完全避免xml,用java代码构建整个布局?
不,对不起。 RemoteViews
严重依赖布局 XML 资源。虽然有一个 addView()
方法,但它转身并添加另一个 RemoteViews
,这会让您回到起点。
我可以像使用 findViewById(int) 一样检索视图吗?
不,因为您的进程中没有View
。您可以通过 RemoteViews
上的各种 setter 方法配置小部件。
【讨论】:
所以如果我理解正确,RemoteViews
是在 AppWidget 上下文中View
的一种“替代品”?我看到我可以使用setTextViewText(int, CharSequence)
来设置显示的文本,但是我可以检索它吗,比如getTextViewText()
?不幸的是,没有这样的方法。对不起,如果问题是微不足道的或蹩脚的,我几个小时前才开始学习。 :)
@hundeva:“RemoteViews 是 AppWidget 上下文中 View 的一种“替代品”?” -- 它是一组序列化的命令,供另一个进程为应用小部件定义Views
。 “但我可以像 getTextViewText() 那样检索它吗?” - 不。应用小部件 API 是只写的。
@CommonsWare 知道this app 是如何做到不可能的事情的吗?
@Pedram:据推测,他们正在创建和显示位图,或者使用addViews()
从一系列较小的布局中组合应用小部件。其中任何一个似乎都适合该应用程序提供的功能,我敢打赌,鉴于他们描述的功能集,他们将使用位图路线。如果您在这方面还有其他顾虑,请提出单独的 Stack Overflow 问题。【参考方案2】:
您可以像LinearLayout mLinearLayout = new LinearLayout(this);
你也可以使用
添加它的寒冷Button mButton = new Button(this);
mLinearLayout.addView(mButton);
setContentView(mLinearLayout);
【讨论】:
这适用于任何 Activity,但是,在使用AppWidgetProvider
时不能这样做以上是关于以编程方式创建小部件的主要内容,如果未能解决你的问题,请参考以下文章