目次
テーブルレイアウト
レイアウトファイル
|
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.