EditText에 우측에 x 버튼을 두어 EditText.getText() > 0 일때만 노출되게 하여
클릭 했을때 EditText의 내용을 모두 지우는 간단한 커스터마이징인데요....
x 아이콘을 추가를 어떻게 할지를 모르겠습니다....
class MyEditText extends EditText{
}
이렇게 클래스를 생성하였는데....
이놈의 레이아웃은 EditText인데... 버튼을 어떻게 추가하죠...?
그래서 아래와 같이 해봤습니다...
class MyEditText extends FrameLayout{
}
레이아웃 설정을 아래부분을 호출하여 하였습니다...
LayoutInflater layoutInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.my_edit_text,this);
프레임 레이아웃은 my_edit_text 의 루트 레이아웃입니다....
이렇게 하여 멤버변수로 EditText와 Button을 만들어서 프레임 레이아웃 안에있는 EditText와 Button을 연결 해주고
getText() 와 setText()는 멤버변수로 접근해 함수 호출을 하는식으로 구현 해보았는데요....
이렇게 하는게 맞나요?
음.. 제가 하고싶은것은... 라이트님 말대로 구현해도 충분히 할 수 있지만 그렇게 구현했을 경우
EditText 뷰가 들어간 모든 엑티비티에 구현을 해야 하고 추후 어떤 프로젝트를 하던 그 기능을 넣으려면 매번 구현해야하는데...
커스터마이징 한 EditText 클래스에서 자동으로 작동하게 내부에 구현 해두면 추후에 그냥 이 클래스로 EditView를 생성해서
사용만 하면 자동으로 그 기능을 가져갈 수 있다는 장점이 있어서... 이렇게 만들려고 하는겁니다...
EditText 뿐만 아니라 제 목표는... 거의 모든 위젯을 커스터마이징 해서 보편적으로 쓰이는 기능은 자동으로
제공 하는것처럼 쓰고 싶어서 그렇습니다... ^^;
자답입니다...
본문 내용과 같이 FrameLayout을 사용하여 EditText와 Button을 만들어두고
클래스명은 MyEditText로 하여 생성자에서 init(Context ctx);를 호출하게 하고
init() 함수에서는 레이아웃 셋팅과 EditText 연결과 TextWatcher설정을 해주고
Button 객체도 연결하고 클릭 했을땐 EditText의 내용을 모두 지우게끔 구현하고
텍스트와쳐에서 텍스트의 길이가 0보다 클때는 Button을
VISIBLE 시켜주고, 작을때는 GONE 시키는 작동을 하게 했습니다...
사용 시에는 EditText클래스를 사용하듯이 사용해야 하기때문에 EditText의 멤버함수명과
동일하고 파라미터도 동일하게 하여 멤버변수로 구현하고 전달받은 파라미터 그대로 EditText
객체에서 동일한 함수를 호출하게끔 구현하였습니다...
사용할때는 그냥 EditText 쓰는것처럼 쓸 수 있고 글 내용 삭제하는 x 버튼은 자동으로 작동하게
되네요....
근데 이걸 jar 파일로 만들 수 있나 모르겠네요... java 파일만 있는게 아니라 layout xml 파일까지
있어야 하는데.... 흠.... 레이아웃도 java로 짜서 추가하게끔 바꿔야하나...? ㅠ_ㅠ




굳이 커스터마이징 할 필요는 없이 FrameLayout 안에 EditText와 버튼(오른쪽정렬)을 같이두고 EditText에 addTextChangedListener를 달아서 글자가 쳐질때마다 길이 판단해서 버튼을 없앴다 나왔다 하면 될것 같네요.