目次
テーブルレイアウト
レイアウトファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/TableLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1" android:shrinkColumns="1,2" tools:context=".MainActivity" > <!-- stretchColumnsで特定の列を画面幅に合わせて広げる(複数指定可) --> <!-- shrinkColumnsで画面幅を超えた時に列幅を縮めるカラムを指定可能 --> <!-- 指定がないと画面からはみ出る --> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:layout_column="2" /> <!-- layout_columnでどのカラムに配置するか指定できる --> </TableRow> <TableRow android:id="@+id/tableRow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:layout_span="3" /> <!-- layout_spanで何要素分か指定できる --> </TableRow> </TableLayout> |
列を折りたたむ
setColumnCollapsed(int columnIndex, boolean isCollapsed)を使う。
第一引数:折りたたみたい行の番号
第二引数:boolean型の値。trueなら折りたたむ。
コード
ボタンを押したら折りたたむ
boolean型のflag
Button型のbtnを宣言している。
29 30 31 32 33 34 35 36 |
btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { tl.setColumnCollapsed(1, flag); flag = !flag; } }); |
ボタンを押すたびにflagが切り替わるため、折り畳み→開くを繰り返せる。
XMLレイアウトを利用しない部品の配置
JavaのコードでActivityに部品を配置する。
RelativeLayout
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // RelativeLayoutを作る RelativeLayout rl = new RelativeLayout(this); // rlにレイアウト属性を設定(高さ&幅) rl.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); // TextViewを作る TextView tv = new TextView(this); // TextViewのレイアウト属性を設定(高さ,幅,中央寄せ) RelativeLayout.LayoutParams txtLayout = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); txtLayout.addRule(RelativeLayout.CENTER_VERTICAL); txtLayout.addRule(RelativeLayout.CENTER_VERTICAL); // TextViewにレイアウト設定をセット tv.setLayoutParams(txtLayout); // TextViewに文字列をセット(今回はリソースから、直書きもOK) tv.setText(getResources().getString(R.string.hello_world)); // RelativeLayoutにTextViewをセット rl.addView(tv); // 出来たレイアウトをActivityにセットする。 setContentView(rl); } |
LinearLayout
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
public class MainActivity extends Activity { // LinearLayoutのレイアウト属性の定数化 private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); // タイトルバーの表示設定(今回は非表示) requestWindowFeature(Window.FEATURE_NO_TITLE); // レイアウトの生成 LinearLayout ll = new LinearLayout(this); ll.setBackgroundColor(Color.rgb(255, 255, 255)); ll.setOrientation(LinearLayout.VERTICAL); setContentView(ll); // テキストビューの生成 TextView tv = new TextView(this); tv.setText("これはテキストです"); // float値で大きさを定義 tv.setTextSize(16.0f); tv.setTextColor(Color.rgb(0, 0, 0)); // コンポーネントのサイズの指定 tv.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); // レイアウトへのコンポーネントへの追加 ll.addView(tv); // 画像の読み込み Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); // イメージビューの生成 ImageView iv = new ImageView(this); iv.setImageBitmap(bitmap); iv.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); ll.addView(iv); } } |
XMLを利用しないリストビューとグリッドビュー
ボタンを押すとリストビューやグリッドビューが表示される仕様。
30個のアイテムを表示させる。
予めAdapterItemクラスを定義。
フィールド変数にBitmap型のiconとString型のtextを宣言している。
メインコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import 色々; public class MainActivity extends Activity implements OnClickListener { private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT; public static ArrayList<AdapterItem> items; // アクティビティ起動時に呼ばれる @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 要素の情報群生成 items = new ArrayList<AdapterItem>(); for (int i = 0; i < 30; i++) { AdapterItem item = new AdapterItem(); item.icon = res2bmp(this,R.drawable.ic_launcher); item.text = "項目" + i; items.add(item); } // レイアウト生成 LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.rgb(255, 255, 255)); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); layout.addView(makeButton("リストビュー","listView")); layout.addView(makeButton("グリッドビュー","gridView")); } // ボタン生成 private View 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; } // ボタンクリック時に呼ばれる @Override public void onClick(View v) { String tag = (String) v.getTag(); if (tag.equals("listView")) { Intent intent = new Intent(this, ListViewActivity.class); startActivity(intent); } else if(tag.equals("gridView")) { Intent intent = new Intent(this, GridViewActivity.class); startActivity(intent); } } private Bitmap res2bmp(Context context, int resID) { return BitmapFactory.decodeResource(context.getResources(), resID); } } |
リストビュー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import 色々; public class ListViewActivity extends Activity { private ArrayList<AdapterItem> items; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 要素の情報群取得 items = MainActivity.items; // リストビューの生成 ListView lv = new ListView(this); // スクロール時に背景が変わってしまうのを防ぐ lv.setScrollingCacheEnabled(false); lv.setBackgroundColor(Color.WHITE); // 背景色 lv.setAdapter(new ListArrayAdapter()); // リストビューをセットする setContentView(lv); } private class ListArrayAdapter extends BaseAdapter { // 数の取得 @Override public int getCount() { return items.size(); } // 要素の取得(型をAdapterItemにしておく) @Override public AdapterItem getItem(int position) { return items.get(position); } // 要素IDの取得 @Override public long getItemId(int position) { return position; } // セルのビュー生成 // convertViewにははじめnullが渡されるが、再利用可能なセルの場合は前回利用したセルが渡される。 @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); // 左から時計回り(cssのように上からではないので注意) layout.setPadding(10, 10, 10, 10); convertView = layout; // アイコン ImageView iv = new ImageView(context); iv.setTag("icon"); iv.setLayoutParams(new LinearLayout.LayoutParams(72,72)); // Viewの幅と高さを決める。 layout.addView(iv); // テキストの指定 TextView tv = new TextView(context); tv.setTag("text"); tv.setTextColor(Color.rgb(0, 0, 0)); tv.setPadding(10, 20, 10, 20); layout.addView(tv); } // 値の指定 // Viewにタグを設定しておくことで親ViewのfindViewWithTag()でタグを指定することにより呼び出せる ImageView iv = (ImageView) convertView.findViewWithTag("icon"); iv.setImageBitmap(item.icon); TextView tv = (TextView) convertView.findViewWithTag("text"); tv.setText(item.text); return convertView; } } } |
グリッドビュー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import 色々; public class GridViewActivity extends Activity { private ArrayList<AdapterItem> items; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 要素の情報群の取得 items = MainActivity.items; // グリッドビュー生成 GridView gv = new GridView(this); gv.setNumColumns(4); // 列の数 gv.setBackgroundColor(Color.WHITE); // 背景色 gv.setAdapter(new GridArrayAdapter()); setContentView(gv); // グリッドビューのセット } private class GridArrayAdapter extends BaseAdapter { @Override public int getCount() { return items.size(); } @Override public Object 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.setPadding(10, 10, 10, 10); // アイテムを追加する方向の指定(VERTICALが垂直、HORIZONTALで水平 layout.setOrientation(LinearLayout.VERTICAL); layout.setGravity(Gravity.CENTER); // 表示位置の指定 convertView = layout; // アイコン ImageView iv = new ImageView(context); iv.setTag("icon"); iv.setLayoutParams(new LinearLayout.LayoutParams(72,72)); layout.addView(iv); // テキスト TextView tv = new TextView(context); tv.setTag("text"); tv.setTextColor(Color.rgb(0, 0, 0)); tv.setGravity(Gravity.CENTER); layout.addView(tv); } // 値の指定 ImageView iv = (ImageView) convertView.findViewWithTag("icon"); iv.setImageBitmap(item.icon); TextView tv = (TextView) convertView.findViewWithTag("text"); tv.setText(item.text); return convertView; } } } |
コメント
No Trackbacks.