2010-05-01 5 views

Antwort

19

Beachten Sie zunächst, dass einige Startbildschirme (z. B. Nexus One) die Ausrichtung nicht ändern.

Der Standardansatz für mit unterschiedlichen Layouts pro Ausrichtung ist die Porträt-Version in res/layout/, und die Landschaft Version in res/layout-land/, die beide unter dem gleichen Namen zu setzen (zum Beispiel appwidget.xml). Beziehen Sie sich dann nur auf den Namen (z. B. R.layout.appwidget), und Android wählt die Datei basierend auf der Ausrichtung aus. Dies funktioniert definitiv für Aktivitäten, also würde ich annehmen, dass es für App-Widgets funktioniert, aber ich glaube nicht, dass ich es tatsächlich ausprobiert habe.

+2

Es funktioniert für appwidgets genau wie Aktivitäten. –

+2

Ich dachte, er sprach über die XML-Datei des Appwidget-Anbieters, in der Sie minWidth & minHeight angeben. Von was sagen Sie, würden Sie einen anderen Anbieter in XML-Land erklären? – Blundell

+0

Bestätigt meine eigene Frage. Sie können zwei Providern einen im Layout und einen im Layout-Land geben, sie werden nur aufgerufen, wenn das Appwidget erstellt wird, wenn sie in dieser Ausrichtung sind, werden sie bei einer Orientierungsänderung nicht aufgerufen – Blundell

2

Um die Breite und Höhe des App-Widget zu ändern, definiert zwei unterschiedliche android:layout_height und android:layout_width Größen für Ihr Layout (im res/layout-port und res/layout-land). Dann definieren Sie die größere Breite und Höhe in Ihrem appwidgetinfo.xml. Auf diese Weise ändert das App-Widget die Größe, wenn die Ausrichtung geändert wird, und nicht nur, wenn Sie das Widget zum Startbildschirm hinzufügen.

0

Wenn Sie RemoteViews verwenden, um Ihr Widget dynamisch zu aktualisieren, können Sie dem Funktionsaufruf updateAppWidget zwei separate RemoteViews bereitstellen. Zum Beispiel:

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews rvLandscape=new Remoteviews(context,R.layout.widget_landscape); 
    rvLandscape.addView(... 
    : 

    RemoteViews rvPortrait =new Remoteviews(context, R.layout.widget_portrait); 
    rvPortrait.addView(... 
    : 

    appWidgetManager.updateAppWidget(widgetId, new RemoteViews(rvLandscape, rvPortrait)); 
} 
Verwandte Themen