Skip to content

Instantly share code, notes, and snippets.

@yukpiz
Created February 7, 2014 04:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yukpiz/fab45ff49af1ece3cc23 to your computer and use it in GitHub Desktop.
Save yukpiz/fab45ff49af1ece3cc23 to your computer and use it in GitHub Desktop.

Android source.

  • View上のEditTextを取得

    findViewByIdの引数にはリソースIDを渡す
    戻り値はViewオブジェクトである為、対応するクラスでキャストする必要がある
    android.app.Activity.findViewById(int id)
    EditText edittext = (EditText)findViewById(R.id.edittext);
  • Cursorをループして値を取得

    while (cursor.moveToNext()) {
        System.out.println(cursor.getString(ColumnIndex));
    }
  • 年月のみのDatePicker

    * 方法1 | DatePickerDialogを利用し、DatePickerの日付部分を非表示にする | DatePickerDialog.getDatePickerはAPI11以上でしか使えない | DatePickerDialogで日付を変更すると、年月日がタイトルへ反映される

    import java.util.Calendar;
    import android.widget.DatePicker;
    import android.app.DatePickerDialog;
    
    ~ (The rest is ommited.)
    
    Calendar calendar = Calendar.getInstance(); //今日の日付を初期設定するため
    DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
       @Override
       public void onDateSet(DatePicker view, int year, int month, int day) {
          //DatePickerDialogで日付選択後、完了された
       }
    }, calendar.get(calendar.YEAR), calendar.get(calendar.MONTH) + 1, calendar.get(calendar.DATE)); //月は0~11なので+1する
    
    //DatePickerDialogのDatePickerから日付ViewのリソースIDを取得する
    int dayId = datePickerDialog.getDatePicker().getResources().getIdentifier("day", "id", "android");
    //日付Viewのインスタンスを取得してsetVisibilityメソッドで非表示にする
    datePickerDialog.getDatePicker().findViewById(dayId).setVisibility(View.GONE);
    //DatePickerDialogのタイトルはデフォルトで年月日になっているので変えておく
    datePickerDialog.setTitle(R.string.title);
    //これは関係ない CalendarとSpinnerの表示設定(デフォルト設定のまま)
    datePickerDialog.getDatePicker().setSpinnersShown(true);
    datePickerDialog.getDatePicker().setCalendarViewShown(false);
    //これは関係ない DatePickerの日付を設定する
    datePickerDialog.getDatePicker().updateDate(2000, 11, 12); //2000年12月12日
    datePickerDialog.show(); //DatePickerDialogを表示する

    * 方法2 | DatePickerの日付部分を非表示にし、AlertDialogで表示する

    import java.util.Calendar;
    import android.app.AlertDialog;
    import android.widget.DatePicker;
    import android.content.DialogInterface;
    
    ~ (The rest is ommited.)
    
    Calendar calendar = Calendar.getInstance(); //今日の日付を初期設定するため
    //表示に使用するAlertDialog
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    DatePicker datePicker = new DatePicker(this);
    //DatePickerから日付ViewのリソースIDを取得する
    int dayId = datePicker.getResources().getIdentifier("day", "id", "android");
    //日付Viewのインスタンスを取得してsetVisibilityメソッドで非表示にする
    datePicker.findViewById(dayId).setVisibility(View.GONE);
    //AlertDialogのViewにDatePickerを設定
    builder.setView(datePicker);
    //AlertDialogのタイトルを設定
    builder.setTitle(R.string.title);
    builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
       @Override
       public void onClick(DialogInterface di, int w) {
          //AlertDialogで日付選択後、完了された
       }
    });
    //キャンセルボタンの設定(第二引数はClickListener)
    builder.setNegativeButton(R.string.cancel, null);
    //AlertDialogの表示
    builder.create();
    builder.show()
  • ActionBarを下部に表示する

    * 方法1 | アプリケーション最上層のViewからActionBarを取得し、 | Viewの末尾に追加し直す事で、画面の下部に移動させる | この方法だと、上部に表示されるべきActionBarが下部に表示される為、 | SplitActionBarで実現できるアイコンボタンの均等割が効かない | ※上部ActionBarはItemを右詰めで配置していく | -> 上部ActionBarで均等割り配置する方法があるか? | ※下部ActionBarは表示できるだけのItemを均等割りで配置する

    public static <T extends View> List<T> findViewsWithClass(View v, Class<T> class) {
       List<T> views = new ArrayList<T>();
       findViewsWithClass(v, class.getName(), views);
       return views;
    }
    public static List<View> findViewsWithClassName(View v, String className) {
       List<View> views = new ArrayList<View>();
       findViewsWithClass(v, className, views);
       return views;
    }
    private static <T extends View> void findViewsWithClass(View v, String class, List<T> views) {
       if (v.getClass().getName().equals(class)) {
          views.add((T) v);
       }
       if (v instanceof ViewGroup) {
          ViewGroup g = (ViewGroup) v;
          for (int i = 0; i < g.getChildCount(); i++) {
             findViewsWithClass(g.getChildAt(i), class, views);
          }
       }
    }
    
    public final static void actionBarUpsideDown(Activity activity) {
       View root = activity.getWindow().getDecorView();
       View firstChild = ((ViewGroup) root).getChildAt(0);
       if (firstChild instanceof ViewGroup) {
          ViewGroup viewGroup = (ViewGroup) firstChild;
          List<View> views findViewsWithClassName(root, "com.android.internal.widget.ActionBarContainer");
          if (!views.isEmpty()) {
             for (View vv: views) {
                viewGroup.removeView(vv);
             }
             for (View vv: views) {
                viewGroup.addView(vv);
             }
          }
       }
    }
    
    ~ (The rest is ommited.)
    
    //Activity起動時に呼び出す
    actionBarUpsideDown(this);

    * 方法2 | splitActionBarWhenNarrowでActionBarを分割して、上部のActionBarを消す方法 | この方法だと、分割されたActionBarの内、上部ActionBarのみを削除する事で、 | 均等割り機能を持つ下部ActionBarだけを表示する事が可能 | しかし、画面横幅が480dp以上ある端末の場合、ActionBarは分割されない

    AndroidManifest.xml

    <activity
       android:uiOptions="splitActionBarWhenNarrow" >

    方法1のactionBarUpsideDownメソッドを修正

    public final static void actionBarUpRemove(Activity activity) {
       View root = activity.getWindow().getDecorView();
       View firstChild = ((ViewGroup) root).getChildAt(0);
       if (firstChild instanceof ViewGroup) {
          ViewGroup viewGroup = (ViewGroup) firstChild;
          List<View> views findViewsWithClassName(root, "com.android.internal.widget.ActionBarContainer");
          if (!views.isEmpty()) {
             for (View vv: views) {
                viewGroup.removeView(vv);
                //上部ActionBarを削除したら、ループを抜ける
                break; //ここを変更
             }
          }
       }
    }

    * 方法3(未検証) | ActionBarにCustomViewを設定して、ボタンを表示する

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment