XML でカスタムView

既存の View を拡張して新たに自分だけの View を作成したいときは

まず、res/values に attrs.xml を作成します

attrs.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.  <!-- name : custom view class name -->  
  4.   <declare-styleable name="CustomView">  
  5.     <attr name="text" format="string" />  
  6.     <attr name="color" format="color" />  
  7.     <attr name="size" format="dimension" />  
  8.   </declare-styleable>  
  9. </resources>  

declare-styleable の name属性は作成するカスタムビューのクラス名を指定する

次に、レイアウトを作成します

xmlns:app="http://schemas.android.com/apk/res/パッケージの名前"
というのを追加します
app は勝手につけた名前

attrs.xml で作成した属性を指定します

XMLリソース
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   xmlns:app="http://schemas.android.com/apk/res/androidtest.app"  
  5.   android:id="@+id/LinearLayout"  
  6.   android:layout_height="fill_parent"  
  7.   android:layout_width="fill_parent">   
  8.   <androidtest.app.CustomView  
  9.     android:id="@+id/CustomView"   
  10.     android:layout_height="fill_parent"  
  11.     android:layout_width="fill_parent"   
  12.     app:text="CustomViewTest"   
  13.     app:color="#FFFF0000"  
  14.     app:size="32sp" />  
  15. </LinearLayout>  

そしたら、カスタムビューの作成

サンプルプログラム(CustomView)
  1. import android.content.Context;  
  2. import android.content.res.TypedArray;  
  3. import android.graphics.Canvas;  
  4. import android.graphics.Paint;  
  5. import android.util.AttributeSet;  
  6. import android.view.View;  
  7. import androidtest.app.R;  
  8.   
  9. public class CustomView extends View {  
  10.   String str;  
  11.   int color;  
  12.   int size;  
  13.   
  14.   public CustomView(Context context, AttributeSet attrs) {  
  15.     super(context, attrs);  
  16.   
  17.     // styleable から TypedArray の取得  
  18.     TypedArray tArray =   
  19.       context.obtainStyledAttributes(  
  20.         attrs,  
  21.         R.styleable.CustomView  
  22.       );  
  23.     
  24.     // TypedArray から String を取得  
  25.     str = tArray.getString(R.styleable.CustomView_text);  
  26.     // TypedArray から Color を取得  
  27.     color = tArray.getColor(R.styleable.CustomView_color, 0xFFFFFFFF);  
  28.     // TypedArray から Dimension を取得  
  29.     size = tArray.getDimensionPixelSize(R.styleable.CustomView_size, 12);  
  30.   }  
  31.   
  32.   @Override  
  33.   protected void onDraw(Canvas canvas) {  
  34.     super.onDraw(canvas);  
  35.     Paint paint = new Paint();  
  36.     paint.setColor(color);  
  37.     paint.setTextSize(size);  
  38.     canvas.drawText(str, 3264, paint);  
  39.   }  
  40. }  

Activity では setContentView で作成した layout を指定するだけ

サンプルプログラム(Activity)
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import androidtest.app.R;  
  4.   
  5. public class CustomViewTest extends Activity {  
  6.   @Override  
  7.   public void onCreate(Bundle savedInstanceState) {  
  8.     super.onCreate(savedInstanceState);  
  9.     setContentView(R.layout.customviewtest);  
  10.   }  
  11. }  

プログラムを実行すると...


こんな感じ!


参考サイト
http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html#customresources

1 件のコメント: