[인터돌™] 공부 해보자!! 열심히~~~

반응형
안드로이드에서 제공하는 기본 레이아웃 외에 사용자가 기존 위젯을 이용해서 뷰를 생성하는 것이 가능하다. 아래의 코드는 EditText와 Button을 이용한 간단한 예제. 참고도서는 "Professional Android Application Development" 의 122 페이지

// ClearableEditText.java
// 사용자 뷰를 위한 컴포넌트 등록

package com.test;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class ClearableEditText extends LinearLayout {
    EditText editText;
    Button clearButton;

    public ClearableEditText(Context context) {
        super(context);
        init();

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

    }
   
    private void init(){
        Log.d("MyLog", "ClearableEditText constructor is called");
        String infService = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater li;
        li = (LayoutInflater) getContext().getSystemService(infService);
        li.inflate(R.layout.clearable_edit_text, this, true);

        editText = (EditText) findViewById(R.id.editText);
        clearButton = (Button) findViewById(R.id.clearButton);

        hookupButton();       
    }

    private void hookupButton() {
        clearButton.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                editText.setText("");
            }
        });
    }
}


<!-- clearable_edit_text.xml -->
<!-- 사용자 뷰를 위한 위젯 배치 -->

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <EditText android:id="@+id/editText" android:layout_width="fill_parent"
        android:layout_height="wrap_content"></EditText>

    <Button android:id="@+id/clearButton" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:text="취소"></Button>

</LinearLayout>

<!-- main.xml -->
<!-- 사용자 뷰 출력 -->

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:text="@string/hello" />
    <com.test.ClearableEditText
        android:id="@+id/NaviView" android:layout_width="fill_parent"
        android:layout_height="wrap_content"></com.test.ClearableEditText>
</LinearLayout>




위의 코드의 경우 LinearLayout 을 상속받는데 이때 사용자 뷰를 만들때는 반드시 모든 경우의 생성자를 오버라이딩 해야 한다.



이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band