我在App Widget中使用ProgressBar遇到了一个有趣的情况......文档(http://developer.android.com/guide/topics/appwidgets/index.html)说ProgressBar是一个受支持的widget类. .
我没有问题让ProgressBar显示在我的App Widget中,但问题是我希望它只在后台处理发生时显示为用户的视觉反馈.
在ImageViews上我通过RemoteViews.setViewVisibility()完成此操作,一切正常.但是,使用ProgressBar,我得到一个异常,说ProgressBar不能使用此方法.
这是故意还是这个错误?有没有办法解决这个问题?
我有一个奇怪的错误与我编码的小部件 - 在屏幕旋转后小部件停止响应onClick事件.代码与此处的 App Widgets的Android开发人员文档完全相同.我注意到市场上的其他小部件没有这个问题 - 是否有一个已知的解决方法?我已经尝试在旋转后遍布整个地方,所以我不认为它的onClickPendingIntent在旋转后没有被调整大小; 它似乎根本不存在.
我无法找到一个onRotation()类型的触发器,AppWidgetProvider在旋转的情况下重做监听代码,所以我很不确定如何继续...
谢谢!
我正在尝试阅读Android上可用的主屏幕小部件列表.我可以使用可用的应用程序列表填充网格
Intent myIntent = new Intent(Intent.ACTION_MAIN, null);
myIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> appsInfo = MyActivity.getPackageManager().queryIntentActivities(myIntent, 0);
Run Code Online (Sandbox Code Playgroud)
而不是遍历每个ResolveInfo.
如何使用可用的主屏幕小部件进行相同的操作?我想用一个显示的相同列表填充一个网格,继续触摸屏幕并从显示的弹出窗口中选择"小部件".
以下是更新appwidget的静态方法:
public static void updateAppWidget(Context context, int id, WALL_POST_DETAILS post){
try{
System.out.println("In updateAppWidget==>"+id);
AppWidgetManager mngr=AppWidgetManager.getInstance(context);
String diff=diff(post.created_time.trim());
RemoteViews views=new RemoteViews(context.getPackageName(),R.layout.widget_layout);
PendingIntent pending=PendingIntent.getActivity(context, 0, new Intent(context,ShareDialogActivity.class), 0);
views.setOnClickPendingIntent(R.id.TextView01, pending);
views.setOnClickPendingIntent(R.id.Button03, pending);
views.setTextViewText(R.id.actor_name, post.actor_name);
views.setTextViewText(R.id.actor_message, post.message);
views.setImageViewBitmap(R.id.actor_photo, post.image);
views.setTextViewText(R.id.created_time, diff);
if(post.no_of_comments>0){
views.setViewVisibility(R.id.comments_image, View.VISIBLE);
views.setViewVisibility(R.id.comment_word, View.VISIBLE);
views.setTextViewText(R.id.no_of_comments, String.valueOf(post.no_of_comments));
views.setViewVisibility(R.id.no_of_comments, View.VISIBLE);
System.out.println("No. of Comments==>"+post.no_of_comments);
}else{
views.setViewVisibility(R.id.comments_image, View.INVISIBLE);
views.setViewVisibility(R.id.comment_word, View.INVISIBLE);
views.setTextViewText(R.id.no_of_comments, String.valueOf(""));
views.setViewVisibility(R.id.no_of_comments, View.INVISIBLE);
}
if(post.no_of_likes>0){
views.setViewVisibility(R.id.likes_image, View.VISIBLE);
views.setViewVisibility(R.id.likes_word, View.VISIBLE);
views.setTextViewText(R.id.no_of_likes, String.valueOf(post.no_of_likes));
views.setViewVisibility(R.id.no_of_likes, View.VISIBLE);
}else{
views.setViewVisibility(R.id.likes_image, View.INVISIBLE);
views.setViewVisibility(R.id.likes_word, View.INVISIBLE);
views.setTextViewText(R.id.no_of_likes, String.valueOf(""));
views.setViewVisibility(R.id.no_of_likes, View.INVISIBLE);
}
Intent …Run Code Online (Sandbox Code Playgroud) 我正在尝试在onUpdate中的窗口小部件布局中的图像视图中设置图像,但图像未更新
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
Log.i(TAG, "onUpdate called");
for (int appWidgetId : appWidgetIds)
{
Bitmap bitmap=ImageUtils.getBitmap(context, appWidgetId);
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
remoteView.setImageViewBitmap(R.id.imgView,bitmap);
appWidgetManager.updateAppWidget(appWidgetId, remoteView);
}
}
Run Code Online (Sandbox Code Playgroud)
小部件的xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imgView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/ic_launcher" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
清单文件
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.demo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".WidgetConfig"
android:label="@string/app_name" >
<intent-filter>
<action
android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
<receiver
android:name="BasicWidgetProvider"> …Run Code Online (Sandbox Code Playgroud) android android-widget remoteview appwidgetprovider android-appwidget
我有一个小部件应用程序,没有问题Android Lollipop或较低的操作系统.当我将nexus 5升级到Marshmallow(android 6.0)时,我意识到我的小部件在加载自定义行列表视图时遇到问题.Widget有一个动态textView和一个动态listView.textView工作得很好; 但是listView行项目没有希望.当我添加小部件时,行处于加载阶段.它与Lollipop或更低版本的设备完全相同,但不适用于Marshmallow.我相信棉花糖正在引发一个我无法找到它的问题.我希望有人告诉我我做错了什么并帮助我解决这个问题.我很感激所有的帮助.谢谢.
WidgetProvider.class:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
System.out.println("WidgetProvider.onUpdate()");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final boolean isMaviKart = MainUtils.getCardType(context).equals(Constants.CARD_TYPE_MAVI);
try {
//set widget id
ComponentName thisWidget = new ComponentName(context, WidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
MainUtils.setWidgetID(prefs, allWidgetIds[allWidgetIds.length - 1]);
for (int i = 0; i < appWidgetIds.length; i++) {
Intent intentService = new Intent(context, WidgetService.class);
intentService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intentService.setData(Uri.parse(intentService.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget);
widget.setRemoteAdapter(appWidgetIds[i], R.id.list_view, intentService);
Intent clickIntent = new Intent(context, MainActivity.class);
PendingIntent …Run Code Online (Sandbox Code Playgroud) android android-widget appwidgetprovider android-appwidget android-6.0-marshmallow
看起来像我的#$#%$%#$接收器不是清单中的应用程序元素
你好
我刚刚创建了helloworld appwidget以了解它的工作原理.我在adroid开发站点上关注了dev示例.但由于某种原因,小部件不希望在小部件列表中显示.
AndroidManifest.xml中
<receiver android:name="VoiceRIAWidget" android:label="Voice RIA">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info" />
</receiver>
Run Code Online (Sandbox Code Playgroud)
appwidget_info.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:label="Voice RIA" android:minWidth="50dp" android:minHeight="50dp"
android:updatePeriodMillis="86400000" android:initialLayout="@layout/appwidget">
</appwidget-provider>
Run Code Online (Sandbox Code Playgroud)
VoiceRIAWidget
public class VoiceRIAWidget extends AppWidgetProvider
{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++)
{
int appWidgetId = appWidgetIds[i];
CharSequence text = "Hello";
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.appwidget);
views.setTextViewText(R.id.appwidget_text, text); …Run Code Online (Sandbox Code Playgroud) 更新:我打开了一个问题,如果您遇到同样的问题,请为其加注. http://code.google.com/p/android/issues/detail?id=28016
我有一个带有gridview的appwidget.
当我开始向我的小部件添加项目时,几乎总是我得到两次显示的第一个项目(而不是显示第一个项目和第二个项目).
如果我做一个小部件更新意图,那么问题是固定的,永远不会返回(假设我的gridview上已经有两个项目).
但总是在添加前两个项目时发生.
任何想法可能是什么?
更新:我刚刚注意到,当一个新项目添加到GridView时,它总会发生.如果我在不添加新项目的情况下刷新小部件,那么它可以正常工作.
我看到的另一件事是getViewAt方法总是为第一个项目(位置零)调用两次.也许它有关系?
我非常密切地关注这里的示例:http: //developer.android.com/resources/samples/WeatherListWidget/src/com/example/android/weatherlistwidget/WeatherWidgetService.html
这是我的RemoteViewsService,我认为这是相关的部分,但我不确定.还有什么可以影响它?
package com.manor.TestApp;
public class TestAppRemoteViewsService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new TestAppViewsFactory(this.getApplicationContext(), intent);
}
}
class TestAppViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private Context mContext;
//private int mAppWidgetId;
private TestDb mDb = null;
private int mCount = 0;
private String[] mData;
public TestAppViewsFactory(Context context, Intent intent) {
mContext = context;
/*mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);*/
}
@Override
public void onCreate() {
mDb …Run Code Online (Sandbox Code Playgroud) 我的应用程序在服务中更新,并首先执行此操作以获取小部件的ID:
AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
int[] widgetIds = widgetManager.getAppWidgetIds(new ComponentName(this, WidgetReceiver.class));
Run Code Online (Sandbox Code Playgroud)
有时,即使窗口小部件仍在主屏幕上,此方法也将返回一个空数组.我四处搜索,找不到任何相关信息.问题是它并不总是发生,只是有时候(尽管一旦看起来它在后续的更新尝试中不会成功的话就会发生).
有没有人碰到这个,更好的是找到了解决方案?非常感激.
我是android开发的新手。我正在尝试为我的应用程序制作一个小部件,其中将包含一个列表视图,每个列表视图除了标题和内容外还具有2个按钮。
我试图在按下该元素的按钮时(在主屏幕上)隐藏应用程序小部件中listitem的相应元素。
首先,我尝试检查按钮单击是否获得了任何响应,以及是否可以检测到是否可以找到项目的位置。所以我这样做:
listprovider.java(实现remoteviewfactory):
@Override
public RemoteViews getViewAt(int position) {
final RemoteViews remoteView = new RemoteViews(
context.getPackageName(), R.layout.list_row);
ListItem listItem = listItemList.get(position);
remoteView.setTextViewText(R.id.heading, listItem.heading);
remoteView.setTextViewText(R.id.content, listItem.content);
Bundle extras = new Bundle();
extras.putInt(WidgetProvider.EXTRA_ITEM, position);
Intent fillInIntent = new Intent();
fillInIntent.putExtras(extras);
// Make it possible to distinguish the individual on-click
// action of a given item
remoteView.setOnClickFillInIntent(R.id.buttonwidget, fillInIntent);
return remoteView;
}
Run Code Online (Sandbox Code Playgroud)
然后在WidgetProvider.java中(扩展了AppWidgetProvider):
for (int i = 0; i < N; ++i) {
RemoteViews remoteViews = updateWidgetListView(context,
appWidgetIds[i]);
Intent clickIntent …Run Code Online (Sandbox Code Playgroud)