Androidアプリ開発で今後も流用できそうなサンプルを中心に主に「自分のために」投稿しています。 細かい説明はしません。とりあえずご参考まで。 ただし自己責任でお使いください。 開発は ICONIA TAB A500(Andorid 3.1,)、Sony Tablet S(4.1)で行っています。
2013年2月20日水曜日
popup menu
コンテキストメニューは大きすぎる。
リストビューで、各セル毎にメニューを出したいときはPopupMenuが便利
/res/menu/cart_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_del"
android:title="削除する"
/>
<item android:id="@+id/menu_up"
android:title="1個増やす"
/>
<item android:id="@+id/menu_down"
android:title="1個減らす"
/>
</menu>
Java
//リストをクリックしたときの処理
listView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view,
int position,long id) {
PopupMenu popup =new PopupMenu(Order.this, view);
popup.getMenuInflater().inflate(R.menu.cart_menu, popup.getMenu());
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()){ case R.id.menu_del: break; case R.id.menu_up: break; case R.id.menu_down: break; } return true; }
});
}
});
context menu
画面の真ん中に出るメニュー
/res/menu/cart_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_del"
android:title="削除する"
/>
<item android:id="@+id/menu_up"
android:title="1個増やす"
/>
<item android:id="@+id/menu_down"
android:title="1個減らす"
/>
</menu>
/res/menu/cart_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_del"
android:title="削除する"
/>
<item android:id="@+id/menu_up"
android:title="1個増やす"
/>
<item android:id="@+id/menu_down"
android:title="1個減らす"
/>
</menu>
java
ボタンなど、メニューを出すViewを設定
registerForContextMenu(listView);
//メニュー選択処理
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_del:
// 全削除
break;
case R.id.menu_up:
// 個数アップ
break;
case R.id.menu_down:
// 個数ダウン
break;
default:
return super.onContextItemSelected(item);
}
return true;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo){
MenuInflater inf = getMenuInflater();
inf.inflate(R.menu.cart_menu, menu);
}
2013年2月15日金曜日
PopUp Window
popup.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/LightSkyBlue">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ImageView
android:id="@+id/popImg"
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@drawable/dark"
android:layout_margin="10dp"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/popTitle"
android:layout_width="500dp"
android:layout_height="70dp"
android:text="title"
android:textSize="30dp"
android:layout_margin="10dp"
/>
<TextView
android:id="@+id/popDetail2"
android:layout_width="400dp"
android:layout_height="70dp"
android:text="title"
android:textSize="16dp"
android:textColor="@color/red"
android:layout_margin="10dp"
/>
<TextView
android:id="@+id/popDetail1"
android:layout_width="400dp"
android:layout_height="140dp"
android:text="title"
android:textSize="16dp"
android:layout_margin="10dp"
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/btnPlay"
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginLeft="150dp"
android:background="@drawable/btndmy"
android:textColor="@android:color/white"
android:textSize="30dp"
android:text="PLAY" />
<Button
android:id="@+id/btnCancel"
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginLeft="50dp"
android:background="@drawable/btndmy"
android:textColor="@android:color/white"
android:textSize="30dp"
android:text="Cancel" />
</LinearLayout>
</LinearLayout>
java
LayoutInflater layoutInf
= (LayoutInflater)getBaseContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInf.inflate(R.layout.popup, null);
PopupWindow popupwindow = new PopupWindow(popupView);
popupwindow.setHeight(450);
popupwindow.setWidth(750);
popupwindow.showAtLocation(view, Gravity.CENTER, 0,0);
TextView title =(TextView)popupView.findViewById(R.id.popTitle);
TextView detail1 =(TextView)popupView.findViewById(R.id.popDetail1);
TextView detail2 =(TextView)popupView.findViewById(R.id.popDetail2);
title.setText(Title[id]);
detail1.setText(Detail1[id]);
detail2.setText(Detail2[id]);
ImageView img = (ImageView)popupView.findViewById(R.id.popImg);
int drawableID = getResources().
getIdentifier(ImageFile[id], "drawable", getPackageName());
img.setImageResource(drawableID);
//Cancel Button
Button btnCancel = (Button)popupView.findViewById(R.id.btnCancel);
btnCancel.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
popupwindow.dismiss();
}});
//Play Button
Button btnPlay = (Button)popupView.findViewById(R.id.btnPlay);
btnPlay.setId(id);
btnPlay.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
popupwindow.dismiss();
play(v.getId());
}});
2013年2月13日水曜日
GridViewで横スクロール
GridViewを使って横スクロールできる可変テーブルを作る
GridViewは縦にしか並ばないので、行数を2行に固定し、列数を可変にする。
java
adapter = new HereAdapter(this, R.layout.list, list);
GridView listView = (GridView)findViewById(R.id.ListView);
listView.setAdapter(adapter);
//GridView を2行に固定するため列数を可変にする
listView.setNumColumns(list.size()/2); //Columns = Total/2
//幅=【セル幅220+spacing20 * Columns)
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(240*(list.size()/2),600);
listView.setLayoutParams(param);
main XML
横スクロールはHorizontalScroolViewを使用
GridViewは縦にしか並ばないので、行数を2行に固定し、列数を可変にする。
java
adapter = new HereAdapter(this, R.layout.list, list);
GridView listView = (GridView)findViewById(R.id.ListView);
listView.setAdapter(adapter);
//GridView を2行に固定するため列数を可変にする
listView.setNumColumns(list.size()/2); //Columns = Total/2
//幅=【セル幅220+spacing20 * Columns)
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(240*(list.size()/2),600);
listView.setLayoutParams(param);
main XML
横スクロールはHorizontalScroolViewを使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="20dp">
<HorizontalScrollView
android:layout_width="1000dp"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<GridView
android:id="@+id/ListView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="0dp"
android:background="@android:color/white"
android:numColumns="1"
android:horizontalSpacing="20dp"
android:verticalSpacing="20dp"
android:layout_marginTop="10dp"
android:padding="20dp">
</GridView>
</LinearLayout>
</HorizontalScrollView>
list XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:background="@color/gray"
android:padding="6dip">
<LinearLayout
android:orientation="vertical"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/img"
android:layout_width="200dp"
android:layout_height="200dip"
android:layout_weight="1"
android:gravity="center_vertical"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:singleLine="true"
android:layout_weight="1"
android:ellipsize="marquee"
android:textColor="@android:color/black"/>
</LinearLayout>
</LinearLayout>
2012年9月13日木曜日
フロントカメラを使う
フロントカメラを使おうとしたが、うまくいかない。真っ黒画面。
ネットでも情報が少ない。
結果(変更点)
mCamera = Camera.open(1); //フロントカメラ指定
//params.setFocusMode(Camera.Parameters.FLASH_MODE_AUTO);
//FLASHが使えないのでこれがあるとだめ。
//params.setPictureSize(800,600);
//フロントは640x480が最大なのでこれもカット
あとはビットマップ処理があれば、この解像度を意識しないとだめ。
ネットでも情報が少ない。
結果(変更点)
mCamera = Camera.open(1); //フロントカメラ指定
//params.setFocusMode(Camera.Parameters.FLASH_MODE_AUTO);
//FLASHが使えないのでこれがあるとだめ。
//params.setPictureSize(800,600);
//フロントは640x480が最大なのでこれもカット
あとはビットマップ処理があれば、この解像度を意識しないとだめ。
2012年8月28日火曜日
Out of Memory
Bitmapを使っているときにOut of Memoryエラーが発生
(何回か実行しているうちに、Heapが足りなくなってエラー)
ネットであちこち探しまわったが、結局解決策はない。
bitmap.recyle();
bitmap = null;
をやってもだめ。
GCは当てにならないらしい。
System.gc();をやってもだめ。
結局、bitmapのサイズをできるだけ小さくするしかない。
Cameraを使っているなら、PictureSizeを小さくする。
params.setPictureSize(800,600);
画像ファイルを使うなら、縮小する
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2; // サイズ縮小
Bitmap bitmap = BitmapFactory.decodeFile(file,opts);
ManifestでHeapサイズを大きくする
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
(ただしこれはエラーの発生を遅らせるだけだが)
これ以外、現在打つ手なし。
(何回か実行しているうちに、Heapが足りなくなってエラー)
ネットであちこち探しまわったが、結局解決策はない。
bitmap.recyle();
bitmap = null;
をやってもだめ。
GCは当てにならないらしい。
System.gc();をやってもだめ。
結局、bitmapのサイズをできるだけ小さくするしかない。
Cameraを使っているなら、PictureSizeを小さくする。
params.setPictureSize(800,600);
画像ファイルを使うなら、縮小する
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2; // サイズ縮小
Bitmap bitmap = BitmapFactory.decodeFile(file,opts);
ManifestでHeapサイズを大きくする
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
(ただしこれはエラーの発生を遅らせるだけだが)
これ以外、現在打つ手なし。
2012年8月21日火曜日
Bitmapの解放
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@407ed350
bitmap.recycle();を実行したとき、まだ使ってるから解放できない、というエラー
対策:onPauseでまとめて解放する。
@Override
public void onPause()
{
super.onPause();
//Bitmap解放
detect1.setImageBitmap(null);
bitmap.recycle();
bitmap = null;
}
bitmap.recycle();を実行したとき、まだ使ってるから解放できない、というエラー
対策:onPauseでまとめて解放する。
@Override
public void onPause()
{
super.onPause();
//Bitmap解放
detect1.setImageBitmap(null);
bitmap.recycle();
bitmap = null;
}
登録:
投稿 (Atom)