OK、私の理解が正しければ、ウィジェット構成アクティビティに 2 つのボタンが必要です ( Info
)。1 つのボタンで、ウィジェット自体のイメージを切り替えます ( と の間R.drawable.widgetdial
) R.drawable.widgetdial2
。もう 1 つのボタンは、選択を保存してInfo
アクティビティを終了します。正しい?
もちろん、アクティビティのレイアウトにボタンを追加する必要がありますInfo
。R.id.change_button
例として以下にこれを参照しました。
私はこれをテストしましたが、動作します。コードにいくつかのコードを追加し、新しいコード部分にコメントを付けました。
public class Info extends Activity {
//next three lines is new code
private int drawableSrc;
private TextView statusText;
private Button changeButton;
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
public Info() {
super();
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setResult(RESULT_CANCELED);
setContentView(R.layout.widget_activity_info);
findViewById(R.id.save_button).setOnClickListener(mOnClickListener);
//next six lines is new code
statusText = (TextView)findViewById(R.id.text);
statusText.setText("Now showing widgetdial image");
changeButton = (Button)findViewById(R.id.change_button);
changeButton.setText("Change to widgetdial2 image");
drawableSrc = R.drawable.widgetdial;
changeButton.setOnClickListener(changeOnClickListener);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
}
View.OnClickListener mOnClickListener = new View.OnClickListener() {
public void onClick(View v) {
final Context context = Info.this;
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.widget_activity);
//next line is new code, needs to come before updateWidgetApp
views.setImageViewResource(R.id.viewid, drawableSrc);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
}
};
//everything below this is new code
View.OnClickListener changeOnClickListener = new View.OnClickListener() {
public void onClick(View v) {
if(drawableSrc == R.drawable.widgetdial) {
drawableSrc = R.drawable.widgetdial2;
statusText.setText("Now showing widgetdial2 image");
changeButton.setText("Change to widgetdial image");
}
else {
drawableSrc = R.drawable.widgetdial;
statusText.setText("Now showing widgetdial image");
changeButton.setText("Change to widgetdial2 image");
}
}
};
}
変更したいものを として参照しましたR.id.viewid
が、これはもちろん ID 参照の例にすぎません。
正確に何を変更したいか (ウィジェットの背景またはウィジェットのイメージビュー?) に応じて、ここで確認できます:その他の SO の質問
アクティビティに使用したレイアウトの例Info
( として参照したファイルR.id.widget_activity_info
) は次のとおりです。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/change_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/text" />
<Button
android:id="@+id/save_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Save"
android:layout_below="@id/change_button" />
</RelativeLayout>
それでもうまくいかない場合は、私がアップロードした私の例をチェックしてください。zip ファイルには、Eclipse にインポートできるワークスペースが含まれています。これをエミュレーターで実行できます。
これがお役に立てば幸いです。