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();
}
}