java - Android java添加widget到view问题
问题描述
我找到了以下允许您插入小部件的功能。
指定:createWidget(View view, String packageName, String className)
目前的问题是:
一些小部件具有配置阶段,例如
WidgetConfigureActivity
. 但是在将小部件插入布局时不会调用它,因此某些小部件没有正确插入。一些小部件,占用空间很小。但在插入时,请占用布局中的所有可用空间。
有什么建议么?
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/homeScreen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:orientation="vertical">
<LinearLayout
android:id="@+id/viewWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical" />
</LinearLayout>
代码:
public boolean createWidget(View view, String packageName, String className) {
// Get the list of installed widgets
AppWidgetProviderInfo newAppWidgetProviderInfo = null;
List<AppWidgetProviderInfo> appWidgetInfos;
appWidgetInfos = mAppWidgetManager.getInstalledProviders();
boolean widgetIsFound = false;
for (int j = 0; j < appWidgetInfos.size(); j++) {
if (appWidgetInfos.get(j).provider.getPackageName().equals(packageName) && appWidgetInfos.get(j).provider.getClassName().equals(className)) {
// Get the full info of the required widget
newAppWidgetProviderInfo = appWidgetInfos.get(j);
widgetIsFound = true;
break;
}
}
if (!widgetIsFound) {
return false;
} else {
Log.v("Class", "Ok*");
// Create Widget
int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), appWidgetId, newAppWidgetProviderInfo);
hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);
// Add it to your layout
LinearLayout widgetLayout = findViewById(R.id.mylockscreen);
widgetLayout.addView(hostView);
// And bind widget IDs to make them actually work
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
boolean allowed = mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, newAppWidgetProviderInfo.provider);
if (!allowed) {
// Request permission - https://stackoverflow.com/a/44351320/1816603
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, newAppWidgetProviderInfo.provider);
final int REQUEST_BIND_WIDGET = 1987;
startActivityForResult(intent, REQUEST_BIND_WIDGET);
}
}
return true;
}
}
列表小部件:
添加小部件大小:
实际小部件尺寸:
解决方案
推荐阅读
- field - $_POST 不适用于 Bluesnap 托管付款字段
- java - 减少代码行和使用可选的最佳方式
- javascript - 如何使chartjs中的饼图可点击(react-native)
- r - ggplotly 和多个高亮功能
- html - 需要使用 flex 在图标周围设置边框
- html - 在 Outlook 2018 中不覆盖 td 的背景图像
- python - PandasError:KeyError:“['Brain'] 不在索引中”
- javascript - Random() 返回 1 或 -1
- email - 使用 OctoberCMS 进行电子邮件排队
- c# - 如何解决 .net 核心构建错误 NETDSDK1061 和警告 MSB3277