画面の向きを固定する [画面]
ManifestファイルのActivityの要素にandroid:screenOrientationで設定する。
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape">
http://developer.android.com/intl/ja/guide/topics/manifest/activity-element.html#screen
【2011年9月17日発売】SONY ソニー タブレット 『Sony Tablet』Sシリーズ用クレードル SGPDS1
- ショップ: いーでじ楽天市場店
戻るボタンを制御する [ボタン]
戻るボタンを強制的に制御できる。
public boolean dispatchKeyEvent(KeyEvent e) { if (e.getKeyCode() == KeyEvent.KEYCODE_BACK) { //ここで制御したい処理を書く。 if (e.getAction() == KeyEvent.ACTION_DOWN) { return false; } return true; } return super.dispatchKeyEvent(e); }
見れば分かるが、何も戻るボタンに限った話ではない。
設定ファイルを扱う [設定]
SharedPreferencesを使うと、キーと値のセットになったxmlを作成してくれる。設定情報などを扱うのに便利。
以下のgetStringの例だが、getIntなど色々ある。
http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
SharedPreferences mSharedpreferences =
getSharedPreferences(PREFERRENCES_FILE_NAME, MODE_PRIVATE); SharedPreferences.Editor editor =mSharedpreferences.edit(); //保存
editor = mSharedpreferences.edit();
editor.putString(KEY, value);
editor.commit();
//データの取得
String value = mSharedpreferences.getString(KEY, "");
//データの削除
editor.remove(KEY); editor.commit();
//クリア
editor.clear(); editor.commit();
設定画面 [設定]
設定画面はPreferenceActivityを使うと楽。
まずresのlayout内に設定画面用のレイアウトを作成する。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="@string/setting_title"> <EditTextPreference android:key="setting_web" android:title="@string/setting_web" android:summary="@string/setting_web_summary" android:dialogTitle="@string/setting_web_dialogtitle" /> <EditTextPreference android:key="setting_blog" android:title="@string/setting_blog" android:summary="@string/setting_blog_summary" android:dialogTitle="@string/setting_blog_dialogtitle" /> </PreferenceCategory> </PreferenceScreen>
EditTextPreferenceしか載せてないが、他にもある。
http://developer.android.com/reference/android/preference/PreferenceActivity.html
次にActivityの作成
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.preference); }
設定画面で編集すると、SharedPreferencesに自動的に保存される。これは便利。
PreferenceManager.getDefaultSharedPreferences(context);
ファイル操作 [ファイル操作]
ファイル操作は多々あるが、Contextを利用した場合。フォルダが作れないのが最大の欠点だと思う。
//Write ここではBitmapを使っている。
byte[] bytedata = bmp2data(bitmap, Bitmap.CompressFormat.JPEG, 80); OutputStream os = null; try { os = con.openFileOutput(fileName, Context.MODE_PRIVATE); os.write(bytedata, 0, bytedata.length); os.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (os != null) os.close(); } catch (IOException e) { e.printStackTrace(); } }
//Read Bitmapを読み込んでいる
InputStream is; is = con.openFileInput(fileName); bitmap = BitmapFactory.decodeStream(is);
//Delete
con.deleteFile(fileName);
リソースの最適化 [layout]
Android SDKの中にlayoutoptなるレイアウトの最適化を評価するツールがある。
layoutopt.bat “レイアウトXMLのディレクトリ”
で実行が可能。
C:\android-sdk-windows\tools>layoutopt.bat D:\work\Android\res
上のような感じでコマンドプロンプトで実行する。
D:\work\Android\res\values\styles.xml
9:9 This item layout or its style parent is useless
こんな感じで結果が返ってくるので、それにそって修正する。
文字を入力するダイアログを作成する。 [Dialog]
mEditText = new EditText(getApplicationContext()); new AlertDialog.Builder(this).setTitle("Question") .setView(mEditText) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mIP = mEditText.getText().toString(); } }).show();
Every Little Thing CD+DVD【アイガアル】11/8/24発売
- ショップ: アットマークジュエリーMusic
画面を傾けた時にViewFlipperのエラーを無くす [ViewFlipper]
public class CustomeViewFlipper extends ViewFlipper { public CustomeViewFlipper(Context context) { super(context); } public CustomeViewFlipper(Context context, AttributeSet set) { super(context, set); } @Override protected void onDetachedFromWindow() { try{ super.onDetachedFromWindow(); }catch(IllegalArgumentException ie){ //ignore; } } }
onDetachedFromWindowをオーバーライドさせて封印するだけ。これはバグらしい。
アプリを終了させる。 [Activity]
Activityの終了はfinishを呼べば良いのだけど、これだとそのActivityしか終了しない。
アプリを終了させるには
moveTaskToBack(true);
これを書いたら全て終わる。さらにプロセスを終了したい場合は
android.os.Process.killProcess(android.os.Process.myPid());
推奨できないけど、System.exitも使える。
メニューを作成する。 [メニュー]
resの下にmenuフォルダを作り、適当なxmlを作成する。ここではabout_menu.xmlとした。
中身はこんな感じ
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="@string/finish" android:icon="@android:drawable/ic_menu_close_clear_cancel"
android:id="@+id/menu_finish"></item>
</menu>
でActivityに書くには以下の通り。
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.about_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_finish:
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
break;
}
return super.onOptionsItemSelected(item);
}