본문 바로가기
프로그래밍/안드로이드

안드로이드 커스텀 버튼 만들기

by -현's- 2015. 3. 17.
반응형



●자바로 Button 위젯 만들기


- CustomEx1.java

package com.custom;


import android.app.Activity;

import android.app.ActionBar.LayoutParams;

import android.os.Bundle;

import android.widget.Button;

import android.widget.LinearLayout;


public class CustomEx1 extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//리니어 레이아웃 선언

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

//레이아웃 파라미터를 리니어 레이아웃에 적용

layout.setLayoutParams(params1);

//버튼을 선언

Button btn = new Button(this);

btn.setText("버튼");

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

//레이아웃 파라미터를 버튼에 적용

btn.setLayoutParams(params2);

layout.addView(btn);

setContentView(layout);

}

}










●커스텀 버튼 위젯을 자바에서 사용하고 보여주기


- MyButton.java

package com.custom;


import android.content.Context;

import android.util.AttributeSet;

import android.widget.Button;


public class MyButton extends Button{

public MyButton(Context context) {

//부모의 생성자를 생성하면서 현재 내가 정의하는 버튼 객체가 어떤 액티비티에서 사용되는지 정보를 넘긴다.

//모든 위젯은 액티비티를 벗어날수 없다.

super(context);

}

}




- CustomEx1.java

package com.custom;


import android.app.Activity;

import android.app.ActionBar.LayoutParams;

import android.os.Bundle;

import android.widget.Button;

import android.widget.LinearLayout;


public class CustomEx1 extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//리니어 레이아웃 선언

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

//레이아웃 파라미터를 리니어 레이아웃에 적용

layout.setLayoutParams(params1);

//버튼을 선언

Button btn = new Button(this);

btn.setText("버튼");

//기타 속성은 레이아웃 파라미터 객체에 지정

LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

//레이아웃 파라미터를 버튼에 적용

btn.setLayoutParams(params2);

//우리가 정의한 커스텀 버튼을 정의

MyButton my_btn = new MyButton(this);

my_btn.setLayoutParams(params2);

my_btn.setText("커스텀 버튼");


//리니어에 버튼을 붙인다.

layout.addView(btn);

layout.addView(my_btn);

setContentView(layout);

}

}










커스텀 버튼 위젯을 xml에서 사용하기


- 커스텀 위젯을 xml에서 사용할 경우 패키지 경로까지 써줘야한다.


- MyButton.java

package com.custom;


import android.content.Context;

import android.util.AttributeSet;

import android.widget.Button;


public class MyButton extends Button{

//현재 클래스를 순수 자바코드에서 메모리에 올릴때는 Context 정보만 넘기면 되지만,

//디자인의 효율목적상 xml레이아웃 파일에서 생성하고자 할대는 xml에서 설정한 각종

//속성 정보가 전달되어지므로, 이 클래스의 생성자에서  그 정보를 받아야 한다.

//결론:생성자 인수를 2개자리로 해야한다.

public MyButton(Context context, AttributeSet set) {

//부모의 생성자를 생성하면서 현재 내가 정의하는 버튼 객체가 어떤 액티비티에서 사용되는지 정보를 넘긴다.

//모든 위젯은 액티비티를 벗어날수 없다.

super(context, set);

}

}

 



- Custom_ex2.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" >

    

    <Button 

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="네이티브 버튼"/>


    <com.custom.MyButton 

        android:id="@+id/btn_cus"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="커스텀 버튼"/>

        

</LinearLayout>




- CustomEx2.java

package com.custom;


import com.example.day0314.R;


import android.app.Activity;

import android.os.Bundle;


public class CustomEx2 extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.custom_ex2);

}

}

 














반응형

댓글