위젯(Wdiget)은 View의 서브 클래스 중에서 화면에 보이는 것들을 말함
View 클래스는 모든 UI 컴포넌트들의 부모 클래스이므로, View 클래스의 속성은 모든 UI 컴포넌트들에서 공통적으로 사용할 수 있다.
id: UI 컴포넌트를 고유하게 식별하는 식별자
layout_width, layout_height: UI 컴포넌트의 크기를 결정
wrap_content: UI 컴포넌트의 내용물 크기에 맞춤
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"/>
layout_width, layout_height의 값을 특정한 단위로 지정할 수도 있음
<Button
android:layout_width="100px"
android:layout_height="100px"
android:text="Start"/>
px (pixels), in (inches), mm (millimeters)
Pixel 방식으로 view의 크기를 설정하면, 디스플레이의 해상도에 따라 view의 크기가 달라 보일 수 있습니다.
가령, 가로세로 100 pixel 크기의 UI요소는 저해상도 디스플레이에서 보이는 것이 고해상도 디스플레이어에서 보이는 것보다 크게 보입니다.
dp (density-independent pixels): 밀도에 독립적인 단위
1 dp는 밀도가 160dpi의 화면 일때 1 픽셀을 나타냄
background
true이면, 텍스트가 위젯의 폭보다 길 때 강제로 한 줄에 출력
text: 일반적인 텍스트 키보드
phone: 전화번호 입력 키보드
textEmailAddress: @ 문자를 가진 텍스트 키보드
textCapWords: 문장의 시작을 대문자로 변환
textAutoCorrect: 입력된 단어와 유사한 단어를 제시하고 제시된 단어 선택시, 입력된 단어를 대치
textMultiLine: 여러 줄을 입력 받을 수 있음
일반적으로 많이 사용되는 푸시 버튼으로 사용자가 버튼을 클릭하였을 때, 어떤 행동을 수행하고자 할 때 사용된다.
Button 클래스는 TextView의 서브클래스이므로, TextView의 모든 속성을 사용할 수 있다.
버튼 내에 텍스트, 아이콘을 표시할 수 있음
예제
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
...
<EditText ... />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"
/>
</LinearLayout>
버튼 위젯을 정의한 xml 레이아웃 파일(예, text_views.xml)에서, 버튼 위젯의 onClick 속성에 앞 단계에서 추가한 메소드(예, doAction())를 설정한다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
...
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"
android:onClick="doAction"/>
</LinearLayout>
버튼 위젯을 정의한 화면을 contentView로 설정한 액티비티 클래스에 새로운 메소드(예, doAction())를 추가한다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_views);
}
// 버튼 클릭이벤트를 처리하는 메소드 정의
public void doAction(View v) {
// Shows a Toast message in response to button
Toast.makeText(getApplicationContext(), "Submitted Successfully",
Toast.LENGTH_SHORT).show();
}
}
이 방법에서는 이벤트를 처리하는 객체를 생성하여 해당 이벤트를 발생시키는 위젯에 등록한다. 위젯에서 이벤트가 발생하면 등록된 이벤트 처리 객체가 정의된 일을 수행한다.
절차
예제
버튼 위젯을 정의한 xml 레이아웃 파일(예, text_views.xml)에서, Button 객체를 Java 코드에서 참조하기 위해서 버튼 위젯에 id 속성 추가
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
...
<Button
android:id="@+id/submit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"
/>
</LinearLayout>
이벤트 처리 클래스 정의 후, 이벤트 처리 객체 생성 및 등록
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.text_views);
// text_views.xml에 정의된 View 객체 중에서 id가 submit_button인 것을 찾아 반환함
Button btn = findViewById(R.id.submit_button);
//2. 구현한 클래스의 객체를 생성하여 클릭 이벤트를 발생시키는 버튼 위젯에 등록
btn.setOnClickListener(new ClickListener());
}
...
//1. 버튼이 클릭되었을 때 발생되는 클릭 이벤트를 처리하기 위해서는 View.OnClickListener 인터페이스를 구현하는 클래스 정의
class ClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), R.string.button_clicked_msg,
Toast.LENGTH_SHORT).show();
}
}
}
참고 (findViewByID() 함수)