Tuesday, December 10, 2013

Include custom view in XML

The exercise show how to refer custom view in XML.

Include custom view in XML


Create custom view extending View in separated file, MyView.java.
package com.example.androidpaint;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {
 
 Bitmap myBitmap;
 int minWidth, minHeight;

 public MyView(Context context) {
  super(context);
  init();
 }

 public MyView(Context context, AttributeSet attrs) {
  super(context, attrs);
  init();
 }

 public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  init();
 }
 
 private void init(){
  myBitmap = BitmapFactory.decodeResource(
    getResources(), R.drawable.ic_launcher);
  minWidth = myBitmap.getWidth();
  minHeight = myBitmap.getHeight();
 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  canvas.drawBitmap(myBitmap, 0, 0, null);
 }

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  setMeasuredDimension(minWidth, minHeight);
 }
 
}


Include <com.example.androidpaint.MyView> in layout XML. where com.example.androidpaint is our package.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:autoLink="web"
        android:text="http://android-er.blogspot.com/"
        android:textStyle="bold" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button"/>
    
    <com.example.androidpaint.MyView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <com.example.androidpaint.MyView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="another button"/>

</LinearLayout>


1 comment:

cinci-hal said...

That answered my question exactly. Great tutorials, by the way.