티스토리 뷰
리스너와 내부익명클래스
리스너 란?
: 이벤트를 처리하는 메소드들이 정의된 인터페이스
개발자가 이벤트 리스너를 Implement 하여 클래스를 정의한 후 객체로 생성하여 이벤트가 발생하는 뷰에 설정해 놓으면 이벤트가 발생할 때 등록된 리스너 안의 콜백 메소드가 시스템에 의해 자동으로 호출됨
(하나의 리스너는 하나의 콜백 메소드를 갖는다.)
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
위의 콜백 메서드는 onClick 메서드 클릭이 될 때 마다 onClick 메서드가 실행된다.
- 리스너의 원형과 익명 내부 클래스
== 리스너의 원형
public class MainActivity extends AppCompatActivity {
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn1);
Listener lis = new Listener(); // 리스너 객체 생성
btn1.setOnClickListener(lis); // 버튼에 리스너 객체 등록
}
public class Listener implements View.OnClickListener{ // 리스너(인터페이스 :View.OnClickListener)를 상속받아 구현한 클래스를 정의하기
@Override
public void onClick(View view) { // 파라미터는 View 이다!!
Toast.makeText(MainActivity.this, "메세지", Toast.LENGTH_SHORT).show();
}
}
}
- 클래스 정의 : Listener 클래스를 정의한다.
- 정의한 클래스 객체를 생성한다.
- 이벤트가 일어나는 리스너에 생성한 객체를 등록한다.
project04_02
CheckBox 의 특징 알기
CheckBox chAgree;
chAgree = findViewById(R.id.chAgree); // 위젯에 객체 생성
chAgree.setOnCheckedChangeListener (new CompoundButton.OnCheckedChangeListner() {
@override
public void OnCheckedChange(CompoundButton compoundButton, Boolean isChecked){
if(chAgree.isChecked()){
}
else ()
}
});
위의 코드를 살펴보자.
기본적으로 체크박스는 checked, unchecked 두 개로 나눠진다.
chAgree 체크박스 위젯은 리스너로 setOnCheckedChangeListener를 사용한다.
해당 리스너는 체크박스가 체크되었을 시 보여지는 뷰를 위해 작동한다.
상속 받는 CompoundButton의 정의는
public abstract class CompoundButton extends Button implements Checkable
추상클래스인 CompoundButton은 Button 클래스와 Checkable 인터페이스를 상속받는다.
또한 nested classes 로 interface 인 CompoundButton.OnCheckedChangeListener 를 갖는다.
CompoundButton.OnCheckedChangeListener 는 추상메소드로 onCheckedChanged(CompoundButton buttonView, boolean isChecked)를 갖는다.
CheckBox chAgree;
chAgree = findViewById(R.id.chAgree);
Listener lis = new Listener();
chAgree.setOnCheckedChangeListener(lis);
public class Listener implements CompoundButton.OnCheckedChangeListener{
@override
pulbic void onCheckedChange(CompoundButton compoundButton, Boolean isChecked){
}
}
뷰 xml 작성 시
id : 작성시 ==> android:id="@+id/btn1"
뷰의 크기 설정 시
layout_width, layout_height
- match_parent : 주어진 영역 내에서 자신의 부모(보통 레이아웃)에 폭이나 높이를 맞춘다는 의미
- wrap_content : 자신의 폭이나 높이를 자신 안의 글자가 들어갈 정도로 설정
뷰의 색상 설정 시
android:background/backgroundTint="#RRGGBB" (#51RRGGBB) --> 앞의 숫자는 투명도를 나타내는 정도
뷰의 특성 : padding , layout_margin
padding : 뷰의 경계와 레이아웃 사이의 간격
layout_margin : 뷰와 뷰 사이의 간격
뷰의 특성 : visibility
android:visibility="invisible/visible/gone"
invisible 과 gone 의 차이 : invisible은 안보이더라도 뷰의 공간을 차지하고 있다.
gone은 보이지 않으면서 공간도 차지하지 않는다.
뷰의 특성 : enabled,clickable 속성
enabled 속성 : 뷰의 동작 여부 (비활성화)
clickable 속성 : 클릭이나 터치가 가능하도록 함
android:enabled="false"
android:clickable="false" ==> 디폴트가 true이다 그래서 클릭 시 사용이 된다.
뷰의 특성 : TextView 속성 :
- textSize ==> android:textSize = "sp, dp, px, in, mm"
- textColor ==> android:textColor="#AARRGGBB"
- textStyle ==> android:textStyle="bold, italic, bold|italic" 디폴트는 normal
- singleLine : 글이 길어 한 줄로 표현되기 힘들 때 강제로 한 줄로 표현하는 방법
==> android:singleLine="true"
xml로 정적으로 디자인 한것은 JAVA 로 모두 동적 디자인 할 수 있다.
TextView tv1;
tv1 = findViewById(R.id.tv1);
tv1.setText("텍스트 입력!");
tv1.setTextColor(Color.RED);
tv1.setTextSize(30); // dp, sp 입력하지 않음!
tv1.setTextStyle("italic");
'학교공부 > 안드로이드' 카테고리의 다른 글
chapter - 14(서비스와 브로드캐스트 리시버) (0) | 2021.05.15 |
---|---|
chaper 10 (액티비티와 인텐트) (0) | 2021.04.22 |
chapter 8 (파일처리) (0) | 2021.04.21 |
chapter 7 (메뉴와 대화상자) (0) | 2021.04.21 |