2014年1月4日土曜日

ディスプレイサイズの取得

andoroid端末のディスプレイサイズ(ピクセル数)を取得する方法

DisplayMetrics displayMetrics = new DisplayMetrics();
(this.getWindowManager().getDefaultDisplay()).getMetrics(displayMetrics);

int screenWidth = displayMetrics.widthPixels;
int screenHeight = displayMetrics.heightPixels;
Log.i("debug", String.valueOf(screenWidth) + ":" + String.valueOf(screenHeight));


DisplayMetricsのオブジェクトに対して、getMetricsメソッドを実行すると、ディスプレイサイズを取得する事が出来る。
取得できるのはピクセル数。
横のピクセル数:widthPixels
縦のピクセル数:heightPixels

例えば、上記の例で240:320といった数字になる。

2014年1月2日木曜日

ImageViewをソースコードで配置する例

ImageViewをソースコードで配置するコーディングの例です。

FrameLayout canvas = (FrameLayout)this.findViewById(R.id.canvasFrameLayout);

ImageView imageView = new ImageView(this);
imageView.setPadding(getDensity(130), 0, 0, 0); //left,top,right,bottom
imageView.setImageResource(R.drawable.ic_point);
imageView.setLayoutParams(new FrameLayout.LayoutParams(getDensity(180), getDensity(180), Gravity.CENTER));
canvas.addView(imageView);

private int getDensityDP( int val) {
return (int)((float)val * getResources().getDisplayMetrics().density);
}

前の投稿のレイアウトエディタのxmlで配置したのと同じようにソースコードで配置してみる。

ポイント
・xmlのpaddingRight:.setPaddingメソッドを使う。
・xmlのlayout_gravity、layout_width、layout_height:上記サンプルの通り.setLayoutParamsを使う。引数でFrameLayoutのオブジェクトを渡しているが、FrameLayoutのオブジェクトでないとGravity.CENTERが渡せない。
・上記それぞの座標で与えている数値の単位はドット。dp, dpiではない。dpを推奨とあるにもかかわらず疑問ですが、上記の例のとおりgetDensityDP()メソッドを作りドットをdpに変換する。


レイアウトエディタのxmlとソースコードのメソッド名を一致してくれればいいのにと思いますがなぜなんでしょうね。

2014年1月1日水曜日

ImageViewの警告[Accessibility] Missing contentDescription attribute on image

ImageViewを使うと以下の警告が出る場合。
>[Accessibility] Missing contentDescription attribute on image

ImageViewのプロパティcontentDescriptionに値の設定がない事が理由
よって以下のように書いておけばよい。

<ImageView
    android:contentDescription="@null"

画像が表示できなかった場合の代替え文字列でしょうか。
必要であれば@nullではなく適当な文字列を与えればよい。

@nullは空文字列のようですが、リファレンスに記載がないような、
私が見つけられないだけのような。todo