Android java добавляет виджет к проблеме просмотра - PullRequest
0 голосов
/ 15 ноября 2018

Я обнаружил следующую функцию, которая позволяет вставлять виджет.

Задание: 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;
            }
        }

ListWidget:

Добавить размер виджета:

Реальный размер виджета:

...