Android プログラミング UI

雑なメモ

ダイアログ

public class TextViewEx extends Activity implements View.OnClickListener {

    private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
    private final static String TAG_MESSAGE = "0";
    private final static String TAG_YESNO = "1";
    private final static String TAG_TEXT = "2";
    private final static String TAG_IMAGE = "3";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

//      レイアウトの生成
        LinearLayout layout = new LinearLayout(this);
        layout.setBackgroundColor(Color.WHITE);
        layout.setOrientation(LinearLayout.VERTICAL); // 整列方向の指定
        setContentView(layout);

//      テキストビューの生成
        TextView textView = new TextView(this);
        textView.setText("これはテストです。");
        textView.setTextSize(16.0f);
        textView.setTextColor(Color.rgb(0, 0, 0));
//      コンポーネントのサイズの指定s
        textView.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
//      レイアウトへのコンポーネントの追加
        layout.addView(textView);

//      画像の読み込み
        Bitmap bitmap = BitmapFactory.decodeResource(
                getResources(), R.mipmap.ic_launcher);

//      イメージビューの生成
        ImageView imageView = new ImageView(this);
        imageView.setImageBitmap(bitmap);
        imageView.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        layout.addView(imageView);

//        ボタンの生成
        layout.addView(makeButton("メッセージダイアログの表示", TAG_MESSAGE));
        layout.addView(makeButton("Yes/Noダイアログの表示", TAG_YESNO));
        layout.addView(makeButton("テキストダイアログの表示", TAG_TEXT));
        layout.addView(makeButton(res2bmp(this, R.mipmap.ic_launcher), TAG_IMAGE));

    }

//    ボタン作成
    private Button makeButton(String text, String tag) {
        Button button = new Button(this);
        button.setText(text);
        button.setTag(tag);
        button.setOnClickListener(this);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        return button;
    }

//    イメージボタンの作成
    private ImageButton makeButton(Bitmap bmp, String tag) {
        ImageButton button = new ImageButton(this);
        button.setTag(tag);
        button.setOnClickListener(this);
        button.setImageBitmap(bmp);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        return button;
    }

//    リソース->ビットマップ
    public Bitmap res2bmp(Context context, int resID) {
        return BitmapFactory.decodeResource(
                context.getResources(), resID);
    }

//    ボタン押下時に呼ばれる
    @Override
    public void onClick(View v) {
        String tag = (String) v.getTag();

        if (TAG_MESSAGE.equals(tag)) {
            MessageDialog.show(this, "メッセージダイアログ", "ボタンを押した");
        } else if (TAG_YESNO.equals(tag)) {
            YesNoDialog.show(this, "Yes/Noダイアログ", "Yes/No選択中");
        } else if (TAG_TEXT.equals(tag)) {
            TextDialog.show(this,"テキスト入力ダイアログ","テキストを入力");
        }else if(TAG_IMAGE.equals(tag)){
            MessageDialog.show(this,"","イメージボタンを押した");
        }
    }

//    メッセージアイアログ作成
    public static class MessageDialog extends DialogFragment {

//    ダイアログの表示
        public static void show(Activity activity, String title, String text) {
            MessageDialog f = new MessageDialog();
            Bundle args = new Bundle();
            args.putString("title", title);
            args.putString("text", text);
            f.setArguments(args);
            f.show(activity.getFragmentManager(), "messageDialog");
        }

//        ダイアログの生成
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            AlertDialog.Builder ad = new AlertDialog.Builder(getActivity());
            ad.setTitle(getArguments().getString("title"));
            ad.setMessage(getArguments().getString("text"));
            ad.setPositiveButton("OK", null);
            return ad.create();
        }

    }

//  Yes/Noダイアログの作成
    public static class YesNoDialog extends DialogFragment{

        public static void show(
                Activity activity, String title, String text){
            YesNoDialog f = new YesNoDialog();
            Bundle args = new Bundle();
            args.putString("title", title);
            args.putString("text", text);
            f.setArguments(args);
            f.show(activity.getFragmentManager(), "yesNoDialog");
        }

//    Yes/Noダイアログの生成
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
//            リスナーの生成
            DialogInterface.OnClickListener listener =
//                    ダイアログボタン押下時に呼ばれる
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if(which == DialogInterface.BUTTON_POSITIVE){
                                MessageDialog.show(getActivity(),"","YES");
                            }else if(which == DialogInterface.BUTTON_NEGATIVE){
                                MessageDialog.show(getActivity(),"","NO");
                            }
                        }
                    };
            AlertDialog.Builder ad = new AlertDialog.Builder(getActivity());
            ad.setTitle(getArguments().getString("title"));
            ad.setMessage(getArguments().getString("text"));
            ad.setPositiveButton("Yes", listener);
            ad.setNegativeButton("No", listener);
            return ad.create();
        }
    }

//    テキスト入力ダイアログの作成
    public static class TextDialog extends DialogFragment{

        private EditText editText;

        public static void show(
                Activity activity, String title, String text){
            TextDialog f = new TextDialog();
            Bundle args = new Bundle();
            args.putString("title", title);
            args.putString("text", text);
            f.setArguments(args);
            f.show(activity.getFragmentManager(), "textDialog");
        }

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            DialogInterface.OnClickListener listener =
                    new DialogInterface.OnClickListener(){
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            MessageDialog.show(getActivity(),"",editText.getText().toString());
                        }
                    };
            editText = new EditText(getActivity());
            AlertDialog.Builder ad = new AlertDialog.Builder(getActivity());
            ad.setTitle(getArguments().getString("title"));
            ad.setMessage(getArguments().getString("text"));
            ad.setPositiveButton("OK", listener);

            if(savedInstanceState != null)editText.setText(savedInstanceState.getString("editText",""));
            return ad.create();
        }

        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putString("editText",editText.getText().toString());
        }
    }

}

チェックボックスラジオボタン、スピナー

public class CheckEx extends Activity implements View.OnClickListener{

    private final  static String BR = System.getProperty("line.separator");
    private final  static int WC = LinearLayout.LayoutParams.WRAP_CONTENT;

//    チェックボックスとラジオボタンとスピナー
    private CheckBox checkBox;
    private RadioGroup radioGroup;
    private Spinner spinner;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        LinearLayout layout = new LinearLayout(this);
        layout.setBackgroundColor(Color.WHITE);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);

//        チェックボックス
        checkBox = new CheckBox(this);
        checkBox.setText("チェックボックス");
        checkBox.setChecked(true);
        checkBox.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        layout.addView(checkBox);

//        ラジオボタン
        RadioButton radio0 = new RadioButton(this);
        radio0.setId(0);
        radio0.setText("ラジオボタン0");
        radio0.setTextColor(Color.rgb(0, 0, 0));

        RadioButton radio1 = new RadioButton(this);
        radio1.setId(1);
        radio1.setText("ラジオボタン1");
        radio1.setTextColor(Color.rgb(0, 0, 0));

//        ラジオグループの生成
        radioGroup = new RadioGroup(this);
        radioGroup.addView(radio0);
        radioGroup.addView(radio1);
        radioGroup.check(0);
        radioGroup.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        layout.addView(radioGroup);

//        スピナーの生成
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item );
        String[] strs = {"赤","青","黄"};
        for(int i=0;i<strs.length;i++) adapter.add(strs[i]);
        spinner = new Spinner(this);
        spinner.setAdapter(adapter);
        spinner.setSelection(0);
        spinner.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        layout.addView(spinner);

        button = new Button(this);
        button.setText("結果表示");
        button.setOnClickListener(this);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
        layout.addView(button);
    }

    @Override
    public void onClick(View v) {
        toast("チェックボックス>"+checkBox.isChecked()+BR+
        "ラジオボタン>" + radioGroup.getCheckedRadioButtonId()+BR+
        "スピナー>" + spinner.getSelectedItem());
    }

    private void toast(String text){
        if(text == null) text = "";
        Toast.makeText(this, text, Toast.LENGTH_LONG).show();
    }
}

WebView

まずは、Manifest.xmlパーミッションの設定。

<uses-permission android:name="android.permission.INTERNET" />

そんでコード。

public class WebViewEx extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        WebView webView = new WebView(this);
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setSaveFormData(false);
        settings.setSupportZoom(false);

        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                toast("通信エラーです");
            }
        });
        setContentView(webView);
        webView.loadUrl("http://python.org");
    }

    private void toast(String string){
        if (string == null)string = "";
        Toast.makeText(this, string,Toast.LENGTH_LONG).show();
    }


}

リストビュー、グリッドビュー、ビューページャー

AdapterEx.java

public class AdapterEx extends Activity
        implements View.OnClickListener {
    private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
    private final static String TAG_LISTVIEW = "listview";
    private final static String TAG_GRIDVIEW = "gridview";
    private final static String TAG_VIEWPAGER = "viewpager";
    public static ArrayList<AdapterItem> items;

    //アクティビティ起動時に呼ばれる
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        //要素の情報群の生成(1)
        items = new ArrayList<AdapterItem>();
        for (int i = 0; i < 30; i++) {
            AdapterItem item = new AdapterItem();
            item.icon = res2bmp(this, R.mipmap.ic_launcher);
            item.text = "項目"+i;
            items.add(item);
        }

        //レイアウトの生成
        LinearLayout layout = new LinearLayout(this);
        layout.setBackgroundColor(Color.WHITE);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);

        //ボタンの生成
        layout.addView(makeButton("リストビュー", TAG_LISTVIEW));
        layout.addView(makeButton("グリッドビュー", TAG_GRIDVIEW));
        layout.addView(makeButton("ビューページャー", TAG_VIEWPAGER));
    }

    //ボタンの生成
    private Button makeButton(String text, String tag) {
        Button button = new Button(this);
        button.setText(text);
        button.setTag(tag);
        button.setOnClickListener(this);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC));
        return button;
    }

    //ボタンクリック時に呼ばれる
    public void onClick(View v) {
        String tag = (String)v.getTag();
        if (TAG_LISTVIEW.equals(tag)) {
            Intent intent = new Intent(this, ListViewActivity.class);
            startActivity(intent);
        } else if (TAG_GRIDVIEW.equals(tag)) {
            Intent intent = new Intent(this, GridViewActivity.class);
            startActivity(intent);
        } else if (TAG_VIEWPAGER.equals(tag)) {
            Intent intent = new Intent(this,ViewPagerActivity.class);
            startActivity(intent);
        }
    }

    //リソース→ビットマップ
    private Bitmap res2bmp(Context context, int resID) {
        return BitmapFactory.decodeResource(
                context.getResources(), resID);
    }
}

AdapterItem.java

public class AdapterItem {
    public Bitmap icon;
    public String text;
}

ListViewActivity.java

public class ListViewActivity extends Activity {
    private ArrayList<AdapterItem> items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

//        要素の取得
        items = AdapterEx.items;

//        リストビューの生成
        ListView listView = new ListView(this);
        listView.setScrollingCacheEnabled(false);
        listView.setAdapter(new MyAdapter());
        setContentView(listView);
    }

//    自作アダプタ
    private class MyAdapter extends BaseAdapter{
//    要素数の取得
        @Override
        public int getCount() {
            return items.size();
        }
//    要素の取得
        @Override
        public AdapterItem getItem(int position) {
            return items.get(position);
        }
//    要素IDの取得
        @Override
        public long getItemId(int position) {
            return position;
        }

//    セルのビューの生成
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Context context = ListViewActivity.this;
            AdapterItem item = items.get(position);

            if(convertView == null){
                LinearLayout layout = new LinearLayout(context);
                layout.setBackgroundColor(Color.WHITE);
                layout.setPadding(10, 10, 10, 10);
                layout.setGravity(Gravity.CENTER_VERTICAL);
                convertView = layout;

                ImageView imageView = new ImageView(context);
                imageView.setTag("icon");
                imageView.setLayoutParams(new LinearLayout.LayoutParams(120, 120));
                layout.addView(imageView);

                TextView textView = new TextView(context);
                textView.setTag("text");
                textView.setTextColor(Color.BLACK);
                textView.setPadding(10, 20, 10, 20);
                layout.addView(textView);
            }

//            値の指定
            ImageView imageView = (ImageView)convertView.findViewWithTag("icon");
            imageView.setImageBitmap(item.icon);
            TextView textView = (TextView)convertView.findViewWithTag("text");
            textView.setText(item.text);
            return convertView;


        }
    }
}

GridViewActivity.java

public class GridViewActivity extends Activity{
    private ArrayList<AdapterItem> items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        items = AdapterEx.items;

        GridView gridView = new GridView(this);
        gridView.setNumColumns(4);
        gridView.setAdapter(new MyAdapter());
        setContentView(gridView);
    }

    private class MyAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return items.size();
        }

        @Override
        public AdapterItem getItem(int position) {
            return items.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Context context = GridViewActivity.this;
            AdapterItem item = items.get(position);

            if(convertView == null){
                LinearLayout layout = new LinearLayout(context);
                layout.setBackgroundColor(Color.WHITE);
                layout.setPadding(10, 10, 10, 10);
                layout.setGravity(Gravity.CENTER_VERTICAL);
                convertView = layout;

                ImageView imageView = new ImageView(context);
                imageView.setTag("icon");
                imageView.setLayoutParams(new LinearLayout.LayoutParams(120, 120));
                layout.addView(imageView);

                TextView textView = new TextView(context);
                textView.setTag("text");
                textView.setTextColor(Color.BLACK);
                textView.setPadding(10, 20, 10, 20);
                layout.addView(textView);
            }

            ImageView imageView = (ImageView)convertView.findViewWithTag("icon");
            imageView.setImageBitmap(item.icon);
            TextView textView = (TextView)convertView.findViewWithTag("text");
            textView.setText(item.text);
            return convertView;


        }
    }
}

ViewPagerActivity.java

//ビューページャーアクティビティ
public class ViewPagerActivity extends Activity {
    private ArrayList<AdapterItem> items;

    //アクティビティ起動時に呼ばれる
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        //要素の情報群の取得
        items = AdapterEx.items;

        //ビューページャーの生成(7)
        ViewPager viewPager = new ViewPager(this);
        viewPager.setAdapter(new MyAdapter());
        setContentView(viewPager);
    }

    //自作アダプタ
    private class MyAdapter extends PagerAdapter {
        //ページ数の取得
        @Override
        public int getCount() {
            return items.size();
        }

        //ページ生成時に呼ばれる
        @Override
        public Object instantiateItem(View view, int pos) {
            ViewPager pager = (ViewPager)view;
            Context context = ViewPagerActivity.this;
            AdapterItem item = items.get(pos);

            //レイアウトの生成
            LinearLayout layout = new LinearLayout(context);
            layout.setBackgroundColor(Color.WHITE);
            layout.setPadding(10, 10, 10, 10);//(4)
            layout.setOrientation(LinearLayout.VERTICAL);
            layout.setGravity(Gravity.CENTER);//(5)

            //アイコン
            ImageView imageView = new ImageView(context);
            imageView.setLayoutParams(new LinearLayout.LayoutParams(240, 240));
            imageView.setImageBitmap(item.icon);
            layout.addView(imageView);

            //テキストの指定
            TextView textView = new TextView(context);
            textView.setTextColor(Color.BLACK);
            textView.setGravity(Gravity.CENTER);//(5)
            textView.setText(item.text);
            layout.addView(textView);

            //ページャー
            pager.addView(layout, 0);
            return layout;
        }

        //ページ破棄時に呼ばれる
        @Override
        public void destroyItem(View collection, int position, Object view) {
            ((ViewPager)collection).removeView((View)view);
        }

        //ページを構成するView判定時に呼ばれる
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == (LinearLayout)object;
        }
    }
}

参考文献