LoginSignup
2
2

More than 5 years have passed since last update.

Android おぼえがき①

Posted at

自分用Androidメモ

Calendar: 古いAPIだと使えない

  • java.util.Calendar を使う

Calendar: 月の最後の日を取得したい

Calendar cal = Calendar.getInstance();
int max_day = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

アプリ終了後も変数を保存したい

  • SharedPreferencesを使う

http://android.roof-balcony.com/shori/strage/preference/
http://androidhacker.blog94.fc2.com/blog-entry-89.html

c.f. Activityのライフサイクルについて
https://qiita.com/m2mtu/items/ac0d61e884519a4c61bb

ActionBarを非表示にしたい(簡単に)

getSupportActionBar().hide();

BottomNavigationView: itemの選択がおかしい

  • Activityで書かない、Fragmentを使う
  • Activityで書いちゃったら、switchの各caseのreturnをfalseにする

TableLayout: 同じ行の他のセルを取得したい

  • getParent(), getChildAt(int position)を使う
TableRow parentRow = (TableRow)view.getParent();
String p_day = ((TextView)parentRow.getChildAt(0)).getText().toString();

SQLite: なぜか不具合が起きる

  • いったんアプリをアンインストールする

SQLite: 複数条件指定したい

db.update("records", cv, "ym = ? AND day = ?", new String[]{p_ym, p_day})

SQLite: レコードがあればupdate、なければinsertしたい

  • db.updateの戻り値(=更新されたレコード数)を使う
res = db.update("records", cv, "ym = ? AND day = ?", new String[]{p_ym, p_day});
if (res < 1){
   // record doesn't exist
   cv.put("ym", p_ym);
   cv.put("day", p_day);
   db.insert("records", null, cv);
}

SQLite: データベースの中身を見たい

  • Android StudioのTerminalを使う
> cd c:\Users\<ユーザー名>\AppData\Local\Android\sdk\platform-tools
> adb shell
> su
> cd data/data/<パッケージ名>.<アプリ名>/databases
> sqlite3 <データベース名>
> <SQLを入力>

TextView: テキストサイズをspで設定したい

TextView tv;
// tvを取得
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20)

EditText: 改行できないようにしたい

editText.setInputType(InputType.TYPE_CLASS_TEXT);

EditText: Doneキーをつけたい

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

EditText: Doneキーが押されたらなんかしたい

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_DONE){
        // 何かする

        // キーボードを閉じる
        InputMethodManager manager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        manager.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
    }
    return true;
}

TimePickerDialog: 3つ目のボタンをつけたい

TimePickerDialog tpg = null;
// tpgを初期化する
tpg.setButton(DialogInterface.BUTTON_NEUTRAL, "DELETE", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // 何かする
    }
});

dp→pxに変換したい

private int dpToPx(int dp){
    int px = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics()));
    return px;
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2