http://www.techfirm.co.jp/lab/android/widget.html
dip = (セル数 * 74dip) - 2dip
<?xml version="1.0" encoding="UTF-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="72dip" android:minHeight="72dip" android:initialLayout="@layout/main" android:updatePeriodMillis="0" />
AppWidgetProviderの以下の処理をオーバーライドすることで、AppWidgetの処理を記述できます。
onEnabled() AppWidgetが作成される際に呼ばれます。 同じAppWidgetを複数起動した際には、初回のみ呼ばれます。 全体的な初期化処理が必要な場合はここに記述します。 onUpdate() AppWidgetが更新される際に呼ばれます。 updatePeriodMillis等で更新間隔を設定していれば、そのタイミングで呼ばれます。 また、AppWidgetを起動した際にも一度呼ばれます。 onDeleted() AppWidgetが削除された際に呼ばれます。 終了処理が必要な場合はここに記述します。 onDisabled() AppWidgetが全て削除された際に呼ばれます。 全体的な終了処理が必要な場合はここに記述します。 onReceive() アクションを受け取り、AppWidgetProviderの各メソッドの呼び出しを処理します。[edit]
”android.appwidget.provider”のXML内、”appwidget-provider”要素に以下の属性を指定すれば可能です。
android:configure="呼び出すActivityのフルパス"
public class ClockConfigure extends Activity implements OnClickListener{ private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; private ArrayList<ImageButton> btnList = new ArrayList<ImageButton>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setResult(RESULT_CANCELED); // 設置されなかった場合に正しくキャンセルされるように setContentView(R.layout.config); // 設定画面 Intent intent = getIntent(); // AppWidgetID の取得 Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } // AppWidgetId がなければ終了 if(mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID){ finish(); } // ボタンクリック検出用 int btns[] = { R.id.btn1, R.id.btn2, R.id.btn3 }; for(int i = 0; i < btns.length; i++){ ImageButton btn; btn = (ImageButton) findViewById(btns[i]); btn.setOnClickListener(this); btnList.add(btn); } Button btnok = (Button) findViewById(R.id.exit_button); btnok.setOnClickListener(this); } // デザイン選択(ボタンクリック) public void onClick(View v) { for (int i = 0; i < btnList.size(); i++) { if (v == btnList.get(i)) { //イベントの起きたViewがどれか調べる SharedPreferences pref = getSharedPreferences( "Widget" + mAppWidgetId, MODE_PRIVATE); Editor e = pref.edit(); switch (i) { case 0: //if (DEBUG) Toast.makeText( this, "btn1 clicked!", Toast.LENGTH_SHORT ).show(); e.putString("dial", "dial1").commit(); break; case 1: e.putString("dial", "dial2").commit(); break; case 2: e.putString("dial", "dial3").commit(); break; default: break; } } } } // OKボタン public void onClickOk(View v) { Log.v("TEST", "AppWidgetExampleConfigure#onClick():mAppWidgetId=" + mAppWidgetId); finishConfigure(); } private void finishConfigure() { RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.clock_widget); // ウィジェットの更新 AppWidgetManager awm = AppWidgetManager.getInstance(this); awm.updateAppWidget(mAppWidgetId, remoteViews); // RESULT_OK Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish(); } }