2014年1月6日月曜日

ImageButtonをmargineを使い十字に配置する例

ImageButtonを指定した位置にプロットして配置する方法。
ImageButtonをmargineを使い十字に配置する例。

・上から、中心、左、右、上、下のボタン
・FrameLayoutやImageButtonのgravityは設定しない。デフォルトのままにする。
・それぞれのImageButtonにlayout_margineLeft, layout_Topで位置を付ける。
・layout_margineRight, layout_Buttomは使えない。正しくレイアウトされない。
・よって中心をlayout_marginLeft="50dp"、layout_marginTop="50dp"としてプロットする。
・中心を0,0でやろうとするとlayout_marginRight, layout_marginButtom方向が正しくプロットされない。

    <FrameLayout
        android:id="@+id/canvasFrameLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginLeft="50dp"
            android:layout_marginTop="50dp"
            android:src="@drawable/ic_point" />

        <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginTop="50dp"
            android:layout_marginLeft="0dp"
            android:src="@drawable/ic_point" />

        <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginTop="50dp"
            android:layout_marginLeft="100dp"
            android:src="@drawable/ic_point" />

        <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginTop="0dp"
            android:layout_marginLeft="50dp"
            android:src="@drawable/ic_point" />
       
        <ImageButton
            android:id="@+id/imageButton1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginTop="100dp"
            android:layout_marginLeft="50dp"
            android:src="@drawable/ic_point" />
       
        </FrameLayout>

・未確認だがButtonも一緒だと思う。
・何故layout_margineRight, layout_Buttomで正しくプロットできないのか不明。Imageでは使えるようだが。疑問todo。

2014年1月5日日曜日

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

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

FrameLayout canvas = (FrameLayout)this.findViewById(R.id.canvasFrameLayout);
ImageButton imageButton = new ImageButton(this);
imageButton.setImageResource(R.drawable.ic_point);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( 50, 50); //ボタンの大きさ
layoutParams.setMargins(100, 100, 0, 0); //ボタンの表示場所: left,top,right,bottom : 使うのはleft,topのみ
imageButton.setLayoutParams(layoutParams);
canvas.addView(imageButton);

ボタンの大きさは、FrameLayoutのLayoutParamsオブジェクトのLayoutParamsメソッドで指定する。
ボタンの場所は、同様に、FrameLayoutのLayoutParamsオブジェクトのsetMarginsメソッドで指定する。

LayoutParamsオブジェクトをsetLayoutParamsメソッドでImageButtonに反映する。

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