Ajuster dynamiquement le contenu et la mise en page du widget à la taille définie par l'utilisateur via redimensionner. Android
Guide de modèle de conception Android dit que le contenu et la mise en page du widget peuvent être ajustés dynamiquement à la taille définie par l'utilisateur grâce à l'opération de redimensionnement ici: Guide de conception pour les widgets
Exemple fourni dans le guide de conception:
Mais je ne vois rien dans les documents sur la façon d'accomplir cela. Comment Pouvons-nous changer la mise en page selon l'opération de redimensionnement? Toutes les idées concernant l'approche seront appréciées.
2 réponses
Grâce à A--C, ceci est possible pour les périphériques Jellybean et ci-dessus et est simple à implémenter.
Voici l'exemple de code utilisant la méthode onAppWidgetOptionsChanged
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onAppWidgetOptionsChanged(Context context,
AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
Log.d(DEBUG_TAG, "Changed dimensions");
// See the dimensions and
Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
// Get min width and height.
int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
int minHeight = options
.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
// Obtain appropriate widget and update it.
appWidgetManager.updateAppWidget(appWidgetId,
getRemoteViews(context, minWidth, minHeight));
super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId,
newOptions);
}
/**
* Determine appropriate view based on width provided.
*
* @param minWidth
* @param minHeight
* @return
*/
private RemoteViews getRemoteViews(Context context, int minWidth,
int minHeight) {
// First find out rows and columns based on width provided.
int rows = getCellsForSize(minHeight);
int columns = getCellsForSize(minWidth);
if (columns == 4) {
// Get 4 column widget remote view and return
} else {
// Get appropriate remote view.
return new RemoteViews(context.getPackageName(),
R.layout.quick_add_widget_3_1);
}
}
/**
* Returns number of cells needed for given size of the widget.
*
* @param size Widget size in dp.
* @return Size in number of cells.
*/
private static int getCellsForSize(int size) {
int n = 2;
while (70 * n - 30 < size) {
++n;
}
return n - 1;
}
@Choletski @ azendh
Après avoir modifié les mises en page, certains événements de clic ne sont plus appelés
J'ai résolu ce problème en créant une fonction qui setOnClickPendingIntent sur afficher, puis le retourner.
Par exemple, le code est comme
private RemoteViews getConfiguredView (RemoteViews remoteViews, Context context){
Intent refreshIntent = new Intent(context, EarningsWidget.class);
refreshIntent.setAction(REFRESH_ACTION);
PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 3, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.refreshButton, toastPendingIntent);
return remoteViews;
}
Et que la fonction est appelée où vous faites " obtenir la vue à distance appropriée."
return getConfiguredView(new RemoteViews(context.getPackageName(), R.layout.activity_widget), context);