Java 使用Android小部件

Java 使用Android小部件,java,android,xml,widget,android-widget,Java,Android,Xml,Widget,Android Widget,我正在试验android widget,并尝试制作一个简单的4x2 widget,每天显示不同的谚语,为此我遵循,一切似乎都很好,没有任何错误或崩溃,但问题是我似乎无法在手机的widget部分找到widget来拖放它。到目前为止,我的代码如下: JAVA public class Widget extends AppWidgetProvider { Random rand = new Random(); String [] daily_proverbs = new String[]{ /

我正在试验android widget,并尝试制作一个简单的4x2 widget,每天显示不同的谚语,为此我遵循,一切似乎都很好,没有任何错误或崩溃,但问题是我似乎无法在手机的widget部分找到widget来拖放它。到目前为止,我的代码如下:

JAVA

public class Widget extends AppWidgetProvider {
Random rand = new Random();
String [] daily_proverbs = new String[]{
    /** list of proverbs goes here */
};

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int count = appWidgetIds.length;

    for (int i = 0; i < count; i++) {
        int widgetId = appWidgetIds[i];
        String prvb = getRandomProverb();

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.activity_widget);
        remoteViews.setTextViewText(R.id.sayings, prvb);

        Intent intent = new Intent(context, Widget.class);
        intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.actionButton, pendingIntent);
        appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
}
public String getRandomProverb(){
    return this.daily_proverbs[rand.nextInt(164)];
}
}
小部件布局XML

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="250dp"
android:padding="8dp"
android:background="@color/white">

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="title goes here"
    android:clickable="false"
    android:textColor="@color/white"
    android:background="@color/electricBlue"
    android:layout_alignParentBottom="true"
    android:id="@+id/button2" />

<TextView
    android:id="@+id/sayings"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:layout_weight="1"
    android:gravity="center"
    android:text="proverbs goes here"
    android:background="@color/white"
    android:textSize="@dimen/abc_text_size_large_material"
    android:textStyle="bold"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_above="@+id/button2"
    android:layout_below="@+id/actionButton" />

<Button
    android:id="@+id/actionButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="some text here"
    android:clickable="false"
    android:textColor="@color/white"
    android:background="@color/electricBlue"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />


您是否在AndroidManifest文件中添加了小部件

<receiver android:name="Widget" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/your_appwidget_info" />
</receiver>

我没有经历所有这些,而是通过以下方式轻松创建了一个小部件:

1-右键单击布局

2-转到“新建”-->小部件-->应用程序小部件


就这样,所有内容都将被设置

布局宽度和布局高度不是有效的属性,而是将属性添加为小部件提供程序XML中的minHeight和minWidth它现在工作了吗?如果没有,你能发布你的小部件布局文件吗?它不工作,我更新了我的问题并添加了小部件布局。我尝试执行你的代码。它对我有用。更改如下:在小部件布局XML中添加了标记。“android:updatePeriodMillis=“1800000”android:initialLayout=“@layout/activity\u main”android:resizeMode=“none”android:previewImage=“@mipmap/ic\u launcher\u round”android:minWidth=“200dp”android:widgetcontegory=“home\u screen”keyguard“>
即使它崩溃了,因为我们还没有向daily_谚语数组添加值。因此,向它添加了一些值并更改了返回值。daily_谚语[rand.nextInt(1)];
<receiver android:name="Widget" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/your_appwidget_info" />
</receiver>