Top 5 안드로이드 커스텀 위젯 만들기 The 58 Correct Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 안드로이드 커스텀 위젯 만들기 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: 안드로이드 커스텀 위젯 만들기 Android widget custom View, 안드로이드 EditText 커스텀

CustomWidget을 만들기 위해서 4단계를 거쳐야 합니다.
  1. CustomWidget의 Layout생성
  2. Widget을 상속받는 Custom클래스 생성
  3. Custom Class에 생성자 추가
  4. Custom WidgetCustom Layout inflating.

2강 스마트폰 홈 화면에 위젯 만들기
2강 스마트폰 홈 화면에 위젯 만들기


안드로이드 CustomWidget 만들기 :: 작심삼일ing

  • Article author: ywook.tistory.com
  • Reviews from users: 36262 ⭐ Ratings
  • Top rated: 3.6 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 안드로이드 CustomWidget 만들기 :: 작심삼일ing Updating …
  • Most searched keywords: Whether you are looking for 안드로이드 CustomWidget 만들기 :: 작심삼일ing Updating 안드로이드 CustomWidget 만들기 CustomWidget을 만들기 위해서 4단계를 거쳐야 합니다. CustomWidget의 Layout생성 Widget을 상속받는 Custom클래스 생성 Custom Class에 생성자 추가 Custom Widget에 Custom La..
  • Table of Contents:
안드로이드 CustomWidget 만들기 :: 작심삼일ing
안드로이드 CustomWidget 만들기 :: 작심삼일ing

Read More

[안드로이드] 커스텀 위젯(Custom Widget)

  • Article author: whatisthenext.tistory.com
  • Reviews from users: 45760 ⭐ Ratings
  • Top rated: 3.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [안드로이드] 커스텀 위젯(Custom Widget) 안드로이드가 커스텀 위젯 제작을 지원하는 방법. 1. 기존 위젯 클래스를 상속 → 기능을 확장하거나 수정. 2. 단순한 기능을 제공하는 위젯을 결합 … …
  • Most searched keywords: Whether you are looking for [안드로이드] 커스텀 위젯(Custom Widget) 안드로이드가 커스텀 위젯 제작을 지원하는 방법. 1. 기존 위젯 클래스를 상속 → 기능을 확장하거나 수정. 2. 단순한 기능을 제공하는 위젯을 결합 … ※ 저는 안드로이드 프로그래밍 정복(김상형 著, 한빛미디어) 책을 이용해 공부하고 있으며 예제와 코드는 이 책을 통해 공부중임을 밝힙니다. 개인적인 공부를 하면서 정리한 형식이기 때문에 심각한 오류가 있을..
  • Table of Contents:

태그

‘프로그래밍안드로이드’ Related Articles

티스토리툴바

[안드로이드] 커스텀 위젯(Custom Widget)
[안드로이드] 커스텀 위젯(Custom Widget)

Read More

[안드로이드]커스텀 위젯만들기 :: highjune

  • Article author: it-highjune.tistory.com
  • Reviews from users: 32841 ⭐ Ratings
  • Top rated: 4.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [안드로이드]커스텀 위젯만들기 :: highjune [안드로이드]커스텀 위젯만들기. highjune 2019. 12. 20. 11:38. xml 파일에 ui를 구성하다보면 반복되는 edittext나 button 들이 있다. …
  • Most searched keywords: Whether you are looking for [안드로이드]커스텀 위젯만들기 :: highjune [안드로이드]커스텀 위젯만들기. highjune 2019. 12. 20. 11:38. xml 파일에 ui를 구성하다보면 반복되는 edittext나 button 들이 있다. xml 파일에 ui를 구성하다보면 반복되는 edittext나 button 들이 있다. 깔끔한 코딩과 재사용성을 높힌 커스텀 위젯을 만들어보자. 결과 – 우선 최종본이다 , textview /..
  • Table of Contents:

2커스텀 위젯 클래스 만들기

3사용해보기

TAG

관련글 관련글 더보기

인기포스트

티스토리툴바

[안드로이드]커스텀 위젯만들기 :: highjune
[안드로이드]커스텀 위젯만들기 :: highjune

Read More

[안드로이드] 코틀린 커스텀위젯 만들기

  • Article author: enter.tistory.com
  • Reviews from users: 18166 ⭐ Ratings
  • Top rated: 4.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [안드로이드] 코틀린 커스텀위젯 만들기 [안드로이드] 코틀린 커스텀위젯 만들기 · Andro 2021. 12. 1. 13:30. 위젯의 커스터마이징은 세 단계로 나눌 수 있다. 1. attrs.xml 파일 생성. …
  • Most searched keywords: Whether you are looking for [안드로이드] 코틀린 커스텀위젯 만들기 [안드로이드] 코틀린 커스텀위젯 만들기 · Andro 2021. 12. 1. 13:30. 위젯의 커스터마이징은 세 단계로 나눌 수 있다. 1. attrs.xml 파일 생성. 위젯의 커스터마이징은 세 단계로 나눌 수 있다. 1. attrs.xml 파일 생성 새로운 위젯을 생성하고 사용할 때 위젯 이름뿐만 아니라 속성의 이름과 입력되는 값의 타입을 정의하고 사용할 수 있도록 한다. 레이아웃..Hello World。
  • Table of Contents:
[안드로이드] 코틀린 커스텀위젯 만들기
[안드로이드] 코틀린 커스텀위젯 만들기

Read More

[Android] Custom 위젯 만들기 : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 39585 ⭐ Ratings
  • Top rated: 4.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Android] Custom 위젯 만들기 : 네이버 블로그 [Andro] Custom 위젯 만들기 … Andro에서 UI개발을 하다보면, 기존에 제공되는 Wget 들을 상속받아 Customizing을 해야 하는 경우가 아주 … …
  • Most searched keywords: Whether you are looking for [Android] Custom 위젯 만들기 : 네이버 블로그 [Andro] Custom 위젯 만들기 … Andro에서 UI개발을 하다보면, 기존에 제공되는 Wget 들을 상속받아 Customizing을 해야 하는 경우가 아주 …
  • Table of Contents:

카테고리 이동

신혼 임신 재테크 트렌드 정보 공유

이 블로그 
IT
 카테고리 글

카테고리

이 블로그 
IT
 카테고리 글

[Android] Custom 위젯 만들기 : 네이버 블로그
[Android] Custom 위젯 만들기 : 네이버 블로그

Read More

Android 독학 10일차 : 커스텀 뷰(Custom View) 만들기

  • Article author: wpioneer.tistory.com
  • Reviews from users: 13844 ⭐ Ratings
  • Top rated: 3.8 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Android 독학 10일차 : 커스텀 뷰(Custom View) 만들기 우리가 위젯을 사용하다 보면 안드로이드에서 제공해주는 위젯을 사용할 때도 있지만 원하는 위젯이 없는 경우에는 직접 위젯을 만들어야 하는 경우가 … …
  • Most searched keywords: Whether you are looking for Android 독학 10일차 : 커스텀 뷰(Custom View) 만들기 우리가 위젯을 사용하다 보면 안드로이드에서 제공해주는 위젯을 사용할 때도 있지만 원하는 위젯이 없는 경우에는 직접 위젯을 만들어야 하는 경우가 … 우리가 위젯을 사용하다 보면 안드로이드에서 제공해주는 위젯을 사용할 때도 있지만 원하는 위젯이 없는 경우에는 직접 위젯을 만들어야 하는 경우가 생긴다. 그리고 이미 존재하는 위젯에서 뭔가 다른 이벤트를..
  • Table of Contents:

태그

‘코딩일기android studio’ 관련글

티스토리툴바

Android 독학 10일차 : 커스텀 뷰(Custom View) 만들기
Android 독학 10일차 : 커스텀 뷰(Custom View) 만들기

Read More

[Andorid]Custom Widget 만들기!

  • Article author: roxxy.tistory.com
  • Reviews from users: 27381 ⭐ Ratings
  • Top rated: 4.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Andorid]Custom Widget 만들기! [Andor]Custom Wget 만들기! 록씨 2015. 1. 29. … 위젯을 만들기 위해서는 크게 4가지 준비물들이 필요합니다. … import andro.wget. …
  • Most searched keywords: Whether you are looking for [Andorid]Custom Widget 만들기! [Andor]Custom Wget 만들기! 록씨 2015. 1. 29. … 위젯을 만들기 위해서는 크게 4가지 준비물들이 필요합니다. … import andro.wget. App widget 위젯이란, 아래 그림과 같이 홈스크린 화면에 떠서 USER와 소통 하는 녀석을 말합니다. [HomeScreen에 떠있는 Widget의 모습] 위젯을 만들기 위해서는 크게 4가지 준비물들이 필요합니다.  1. AppWid..
  • Table of Contents:
[Andorid]Custom Widget 만들기!
[Andorid]Custom Widget 만들기!

Read More

[안드로이드/Android] 위젯 만들기

  • Article author: superwony.tistory.com
  • Reviews from users: 12121 ⭐ Ratings
  • Top rated: 5.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [안드로이드/Android] 위젯 만들기 이직등의 이유로 오랜만에 포스팅을 하게됐습니다. 이번 포스팅의 주제는 ‘위젯 만들기’며 위젯을 생성하고 ui를 업데이트 하는 과정까지를 작성 했습니다 … …
  • Most searched keywords: Whether you are looking for [안드로이드/Android] 위젯 만들기 이직등의 이유로 오랜만에 포스팅을 하게됐습니다. 이번 포스팅의 주제는 ‘위젯 만들기’며 위젯을 생성하고 ui를 업데이트 하는 과정까지를 작성 했습니다 … 안녕하세요. 이직등의 이유로 오랜만에 포스팅을 하게됐습니다. 이번 포스팅의 주제는 ‘위젯 만들기’며 위젯을 생성하고 ui를 업데이트 하는 과정까지를 작성 했습니다. 텍스트뷰만 갖고 있는 위젯을 사용했으며,..
  • Table of Contents:

태그

‘안드로이드코틀린’ Related Articles

티스토리툴바

[안드로이드/Android] 위젯 만들기
[안드로이드/Android] 위젯 만들기

Read More


See more articles in the same category here: https://chewathai27.com/to/blog.

안드로이드 CustomWidget 만들기

안드로이드 CustomWidget 만들기

CustomWidget을 만들기 위해서 4단계를 거쳐야 합니다.

CustomWidget의 Layout생성 Widget을 상속받는 Custom클래스 생성 Custom Class에 생성자 추가 Custom Widget에 Custom Layout inflating

1. CustomWidget의 Layout생성

-CustomWidget에 표현하고 싶은 Layout을 만듭니다.

2.Widget을 상속받는 Custom클래스 생성

-아래와 같이 Widget을 상속하는 클래스를 생성합니다.

public class CustomWidget extends LinearLayout {

}

3. Custom Class에 생성자 추가

-여러가지 생성자가 있는데 xml파일에서도 Class에서 만든 CustomWidget을 사용하기 위해서

AttributeSet이 추가된 생성자를 추가해야합니다.

public class CustomWidget extends LinearLayout {

public CustomWidget(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

}

}

4.Custom Widget에 Custom Layout inflating

-1번에서 작성했던 Layout을 Custom Widget에 inflating 해줍니다.

public class CustomWidget extends LinearLayout implements View.OnClickListener{

AutoCompleteTextView autoEt;

ImageView img;

Button add_btn;

Button next_btn;

int imageno = 0;

public CustomWidget(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init(context);

}

private void init(Context context){

LayoutInflater.from(context).inflate(R.layout.customwidget,this);

autoEt = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);

img = (ImageView)findViewById(R.id.image1);

add_btn = (Button)findViewById(R.id.b_add);

next_btn = (Button)findViewById(R.id.b_next);

add_btn.setOnClickListener(this);

next_btn.setOnClickListener(this);

}

그리고 만든 CustomWidget을 추가해주고 싶은 xml파일에 추가해주면 됩니다.

< LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: tools = "http://schemas.android.com/tools" android :layout_width= "match_parent" android :orientation= "vertical" android :padding= "8dp" android :layout_height= "match_parent" tools :context= "com.examples.androidpractice7.MainActivity" >

< com.examples.androidpractice7.CustomWidget android :id= "@+id/cswidget" android :layout_width= "match_parent" android :layout_height= "wrap_content" >

만약 만든 CustomWidget의 Button클릭 같은 event를 다른 activity파일에서 구현해주고 싶으면 interface를 이용하면 됩니다.

아래는 interface를 이용한 예제입니다.

interface를 사용하기 위해서 추상 메소드를 만들고 setOnAMListiner 호출을 통해 다른 activity에서

추상 메소드를 구현하게 만들었습니다.

public class CustomWidget extends LinearLayout implements View.OnClickListener{

AutoCompleteTextView autoEt;

ImageView img;

Button add_btn;

Button next_btn;

int imageno = 0;

private Boolean M = false;

public CustomWidget(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

init(context);

}

private void init(Context context){

LayoutInflater.from(context).inflate(R.layout.customwidget,this);

autoEt = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);

img = (ImageView)findViewById(R.id.image1);

add_btn = (Button)findViewById(R.id.b_add);

next_btn = (Button)findViewById(R.id.b_next);

add_btn.setOnClickListener(this);

next_btn.setOnClickListener(this);

}

public void setItem(Fruit temp){

autoEt.setText(temp.getName());

img.setImageResource(temp.getImgno());

add_btn.setText(“M”);

M = true;

}

interface OnAMListener{

void onAdd(String name, int imgno, int p);

void onModify(String name, int imgno, int p);

}

public OnAMListener onAddListener;

public OnAMListener onModifyListener;

public void setOnAMListener(OnAMListener onAddListener){

this.onAddListener = onAddListener;

this.onModifyListener = onAddListener;

}

@Override

public void onClick(View view) {

if(view == add_btn){

if(M){

onModifyListener.onModify(autoEt.getText().toString(), Fruit.image[imageno], imageno);

add_btn.setText(“Add”);

M = false;

autoEt.setText(“”);

}

else {

onAddListener.onAdd(autoEt.getText().toString(), Fruit.image[imageno], imageno);

autoEt.setText(“”);

}

}else{

if(imageno == Fruit.image.length -1) imageno = -1;

img.setImageResource(Fruit.image[++imageno]);

}

}

}

아래는 CustomWidget, interface을 이용해 만든 예제입니다

위 앱의 모든 코드는 GitHub에서 볼 수 있습니다!

https://github.com/Ywook/AndroidPractice7

[안드로이드] 커스텀 위젯(Custom Widget)

※ 저는 안드로이드 프로그래밍 정복(김상형 著, 한빛미디어) 책을 이용해 공부하고 있으며

예제와 코드는 이 책을 통해 공부중임을 밝힙니다.

개인적인 공부를 하면서 정리한 형식이기 때문에 심각한 오류가 있을 수 있습니다. 피드백 주시면 정말 감사하겠습니다.

※ 안드로이드 프로그래밍 정복 1판 참조

커스텀 : 내 입맛대로 만들겠다!

커스텀 위젯 : 내 입맛대로 위젯을 만들겠다!

안드로이드가 커스텀 위젯 제작을 지원하는 방법

1. 기존 위젯 클래스를 상속 → 기능을 확장하거나 수정

2. 단순한 기능을 제공하는 위젯을 결합하여 복잡한 동작을 수행하는 위젯 그룹을 정의

VIewGroup이나 파생 클래스를 확장하여 만든다.

3. 기존에 없었던 새로운 위젯을 만든다.

최상위 위젯 클래스 VIew로부터 상속받는다.

< 1번 예제 : 기존 위젯 클래스를 상속 >

주의할 점은 SoundEditWidget을 작성할 때

풀패키지 명(名).SoundEditWidget으로 작성해주어야 한다.

public class SoundEdit extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.soundedit);

}

}

class SoundEditWidget extends EditText { // 기존 위젯 클래스(EditText)를 상속받음

SoundPool mPool = null;

int mClick;

public SoundEditWidget(Context context) { // 생성자 1

super(context); // 인수 1개, 슈퍼클래스의 생성자를 호출후 상속받은 멤버 초기화

init(context); // 고유의 초기화

}

public SoundEditWidget(Context context, AttributeSet attrs) { // 생성자 2

super(context, attrs); // 인수 2개, 슈퍼클래스의 생성자를 호출후 상속받은 멤버 초기화

init(context); // 고유의 초기화

}

public SoundEditWidget(Context context, AttributeSet attrs, int defStyle) { // 생성자 3

super(context, attrs, defStyle); // 인수 3개, 슈퍼클래스의 생성자를 호출후 상속받은 멤버 초기화

init(context); // 고유의 초기화

}

void init(Context context) { // 고유의 초기화

mPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

mClick = mPool.load(context, R.raw.click, 1);

}

protected void onTextChanged(CharSequence text, int start, int before, int after) {

if (mPool != null) { // 널(Null) 체크

mPool.play(mClick, 1, 1, 0, 0, 1);

}

}

}

0. 먼저 클릭할 때 나는 소리를 res/raw 폴더에 넣어주어야 한다.

1. EditText 클래스를 확장(Extends)하여 SOundEditWidget 클래스를 파생시켰다.

2. 생성자는 세 개를 정의했다. (범용성, 즉 사용의 편리성을 높이기 위해서 다양한 형태로 오버라이딩)

3. 텍스트가 입력되거나 삭제되면 onTextChanged 메서드가 호출된다.

4. if(mPool != null) 널체크

위에서 if (mPool != null ) 문장을 빼보자. 위와 같은 오류가 발생한다.

만약 자바에서 변수값이 null인 상태에서 이를 가지고 작업하려 하면 NullPointerException 오류가 발생한다.

따라서 보통 다음과 같은 널 체크(Null Check)를 실시한다

if (param == null || param.length() == 0 ) { // 값이 있는 경우 처리

} else {

// 값이 없는 경우 처리

}

또는

if (param == null || param.length() == 0 ) {

// 값이 없는 경우 처리

} else {

// 값이 있는 경우 처리

}

< 2번 예제 : 위젯 조합 >

복잡한 작업을 수행하기 위해서 관련된 위젯을 하나의 그룹으로 묶어 새로운 위젯을 정의한다.

예제에 들어가기 앞서 내가 복습해야 할 것들이 있다.

1. 위젯(Widget)은 사용자와 통신하면서 상호작용하는 역할을 한다.

가장 빈번하게 사용하는 위젯이 “명령을 입력받는 Button”과 문자열을 입력받는 “EditText”이다.

2. TextView에서는 문자열 포맷팅, 출력, 입력, 편집에 관련된 기능(function)이 구현되어 있다.

그러나, 대부분의 기능은 숨겨져 있으며, “문자열 출력 기능”만 노출한다.

즉, Button(버튼)과 EditText(에딧)은 TextView의 숨겨진 기능을 활성화 + 스타일을 입힌것 뿐이다.

3. 문자열 변경 리스너

void addTextChangedListener (TextWatcher watcher)

텍스트가 변경되는 시점에 특정 작업을 하고 싶다면 위 메서드로 리스너를 “등록”한다.

위 인수에 편집 이벤트를 처리하는 TextWatcher가 있다.

TextWatcher 객체를 생성한 후 리스너를 등록하면 사용자가 문자열을 편집할 때마다

TextWatcher 인터페이스의 다음 메서드가 호출된다.

void beforeTextChanged (CharSequence s, int start, int count, int after)

void afterTextChanged (Editable s)

void onTextChanged (CharSequence s, int start, int before, int count)

public class ExerciseExam extends AppCompatActivity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_excercise_exam);

}

}

// NumEditWidget은 LinearLayout을 상속받아 차일드 위젯을 일렬로 배치하는 능력을 물려받는다.

class NumEditWidget extends LinearLayout implements TextWatcher {

EditText mEdit;

TextView mText;

public NumEditWidget(Context context) {

super(context);

init();

}

public NumEditWidget(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

void init() {

//* 코드로 직접 차일드 생성

setOrientation(LinearLayout.VERTICAL);

mEdit = new EditText(getContext()); // 객체 생성1

mText = new TextView(getContext()); // 객체 생성2

mText.setText(“Now Length : 0 Characters”);

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(

LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

addView(mEdit, param);

addView(mText, param);

//*/

/* 레이아웃 전개

LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(

Context.LAYOUT_INFLATER_SERVICE);

inflater.inflate(R.layout.numeditwidget, this, true);

mEdit = (EditText)findViewById(R.id.limedit_edit);

mText = (TextView)findViewById(R.id.limedit_text);

//*/

mEdit.addTextChangedListener(this); EditText의 텍스트 변경 리스너를 this로 지정

}

public void afterTextChanged(Editable s) {

}

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

public void onTextChanged(CharSequence s, int start, int before, int count) {

mText.setText(“Now Length : ” + s.length() + ” Characters”);

}

}

앞 예제는 EditText를직접 상속받은 것이므로

protected 속성을 가지는 onTextChanged 메서드를 바로 재정의할 수 있다.

(앞 예제를 다시 가져왔다.)

하지만 이 예제는 EditText를 멤버로 포함할 뿐이므로 바로 재정의할 수 없다.

그래서 와처(Watcher)를 등록하고 문자열 변경 시점을 알아낸다.

레이아웃에는 NumEditWidget 하나만 배치했다.

커스텀 위젯은 반드시 전체 패키지 경로 (위 예제에서 lkcompnay.exercise) 를 모두 밝혀야 한다.

< 3번 예제 : 커스텀 속성 >

레이아웃 작성시에는 XML문서를 주로 활용한다.

그렇다면, 어떤 과정을 거쳐서 XML 문서의 위젯이 생성되고 속성이 초기화될까?

XML 문서는 aapt 툴에 의해 이진(binary) 형태로 컴파일되어 실행 파일에 포함되며

전개자(Inflater)가 이 정보를 읽어 각 위젯을 “생성”한다.

전개자는 XML 문서에 쓰여진 속성 집합을 “하나의 객체”로 포장하여 위젯의 생성자로 전달한다.

생성자는 멤버를 초기화하는 것이므로, 위젯 스스로 초기화되도록 지시한다.

이 속성 목록이 두 번쨰 인수인 AttributeSet 객체이며 이 안에 초기화할 속성 목록과 속성갑시 컴파일되어 있다.

int getAttributeCount() // (정수형) 속성의 개수

String getAttributeName (int index) // 이름 조사

String getAttributeValue (int index) // 값 조사

int getAttributeIntValue (int index, int defaultValue)

boolean getAttributeBooleanValue (int index, boolean defaultValue) // (진위형)

float getAttributeFloatValue (int index, float defaultValue) // (실수형)

먼저 결과를 위와같이 출력하려고 한다.

LinearLayout 안에 버튼 위젯(Button Widget)을 배치하고 여러 가지 속성(textSize, textColor)을 적용했다.

public class ExerciseExam extends AppCompatActivity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_excercise_exam);

AttrButton btn = (AttrButton) findViewById(R.id.attrbtn);

TextView text = (TextView) findViewById(R.id.attrtext);

text.setText(btn.mText);

}

}

class AttrButton extends Button {

String mText = “”;

public AttrButton(Context context, AttributeSet attrs) {

super(context, attrs);

int i;

String Name;

String Value;

for (i = 0; i < attrs.getAttributeCount(); i++) { Name = attrs.getAttributeName(i); // 이름을 조사함 Value = attrs.getAttributeValue(i); // 값을 조사함. mText += (Name + " = " + Value + " "); } } } 생성자로 전달되는 속성을 확인하려면 서브 클래스를 파생하여 생성자를 가로채야 한다. AttrButton 클래스는 생성자에서 속성의 목록을 "문자열 형태"로 바꿔 자신의 멤버 mText에 저장한다. < 4번 예제 : 새로운 위젯 만들기 >

새로운 위젯을 만들 떄는 뷰의 최상위 클래스인 View로부터 상속받는다.

View는 “그리기 메서드”와 사용자와 통신하기 위한 “이벤트 핸들러”의 기본 원형을 제공한다.

그러나 뷰의 기능은 너무 일반적이어서 (최상위 클래스니까) 그 자체로는 쓸모가 없다.

따라서 상속받은 후, 반드시 “재정의(overriding)”를 해야한다.

재정의 해야 하는 메서드는 onDraw, onMeasure (위젯의 크기를 결정) 메서드이다.

void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

인수로 전달되는 Spec은 부모 레이아웃이 차일드(자손)에게 제공하는 여유 공간의 폭과 높이에 대한 정보이다. 이 안에 공간의 성질을 지정하는 모드와 공간의 크기값이 저장되어 있다.

1. 크기 정하기

위와 같은 예제를 만드려고 한다.

빨간섹 네모는 위젯(widget)이며 수평 리니어 레이아웃에 배치했으므로

[안드로이드]커스텀 위젯만들기

xml 파일에 ui를 구성하다보면 반복되는 edittext나 button 들이 있다.

깔끔한 코딩과 재사용성을 높힌 커스텀 위젯을 만들어보자.

결과

– 우선 최종본이다 , textview / edittext / textview 순으로 제목/ 내용쓰는곳 /간단한 설명을 상황에따라 문구를 수정할수 있는 edittext 위젯을 만들것이다.

1.속성정의

수정하려는 부분을 name에 정의 해놓으면

이런식으로 사용이 가능하다.

2.커스텀 위젯 클래스 만들기

class MorEditText :LinearLayout { // 속성 : bg 타입 : integer // 속성 : symbol 타입 : integer // 속성 : title 타입 : string // 속성 : placeholder 타입 : string // 속성 : belowExplain 타입 : string // 속성 : textColor 타입 : integer // 속성 : editable 타입 : boolean constructor(context: Context?) : super(context) { initLayout() } constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { initLayout() if (attrs != null) { getAttrs(attrs) } } constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super( context, attrs, defStyleAttr ){ initLayout() if (attrs != null) { getAttrs(attrs,defStyleAttr) } } private fun initLayout() { LayoutInflater.from(context).inflate(R.layout.mor_edittext, this, true) } private fun getAttrs(attrs : AttributeSet) { val typedArray = getContext().obtainStyledAttributes(attrs,R.styleable.morET ) as TypedArray setTypeArray(typedArray); } private fun getAttrs(attrs : AttributeSet,defStyle:Int) { val typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.morET, defStyle, 0) as TypedArray setTypeArray(typedArray); } private fun setTypeArray( typedArray:TypedArray) { //Title val strTitle = typedArray.getString(R.styleable.morET_title) if (strTitle != null){ mor_et_title_linearLayout.visibility = View.VISIBLE mor_et_title.setText(strTitle) } else { mor_et_title_linearLayout.visibility = View.GONE mor_et_title.setText(“”) } //Hint val strHint = typedArray.getString(R.styleable.morET_placeholder) if (strTitle != null){ mor_et_edittext.setHint(strHint) } else { mor_et_edittext.setHint(“”) } //reference val strRef = typedArray.getString(R.styleable.morET_belowExplain) if (strRef != null){ mor_et_reference_linearLayout.visibility = View.VISIBLE mor_et_reference.setText(strRef) } else { mor_et_reference_linearLayout.visibility = View.GONE mor_et_reference.setText(“”) } typedArray.recycle(); } fun setMor_et_title(s:String){ mor_et_title.setText(s) } fun setmor_reference_need(s:String){ mor_reference_need.setText(s) } fun setmor_et_edittext(s:String){ mor_et_edittext.setText(s) } fun getmor_et_edittext():String{ return mor_et_edittext.text.toString() } }

– 이전에 android 자체적으로 생성되어있는 widget들도 이런식으로 생성자를 거처 생성된다.

– initLayout : 커스텀할 layout을 inflater로 가저와 지정해준다.

– setTypeArray에 typeArray.getString(위쪽)에서는 app:title = “text”(아래쪽)이라고 할때 text를 String 값으로 리턴해준다.

– string 값으로 리턴해준 이유는 이전 declare-stleable 에 format 부분을 “reference|string”지정했기 때문이다

– 이제 return값을 실제 위젯이랑 연결 시켜준다 TextView.setText( return값)

– 지정해준뒤에는 재사용을 위해 typedArray.recycle()을 해줘야한다.

3.사용해보기

So you have finished reading the 안드로이드 커스텀 위젯 만들기 topic article, if you find this article useful, please share it. Thank you very much. See more: Android widget custom View, 안드로이드 EditText 커스텀

Leave a Comment