1. 위젯(Widget)
- View(안드로이드 앱의 UI를 구성하는 기본 단위)의 서브 클래스로서, 앱 화면을 구성하는 시각적인 모양을 지닌 UI 요소
- View의 서브 클래스 중에서 화면에 보이는 것 ex) TextView, EditText ..
Button
- 클릭하였을 때 어떤 행동을 실행하게 하는 형태
- android: id = "@+id/btn_button" : 고유의 식별자를 지정하며, id가 중복될 수 없고 레이아웃에 있는 위젯을 코드에 가져다 쓰기 위해 필요
- Chain > Creat Vartical/Horizontal Chian : 여러 버튼을 체인으로 묶어 사용
- android: alpha = "0.5" : 버튼 전체 투명도. 0.5 (50%)
- android: background = "lmage" : 버튼의 배경 색이나 버튼 모양을 변경
더보기
변경이 되지 않을 때, rec > values > themes > parent="Theme.AppCompat.Light" 변경
- android: onClick = "doAction" : 버튼을 클릭하였을 때 실행할 구문을 엑티비티 클래스에 메소드 추가
더보기
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun doAction(View){
//버튼을 실행하였을 때 동작할 코드 작성
}
}
//이벤트 처리 객체를 이용 가능 : OnClickListener
- 실무에서의 버튼은 ImageView를 사용하여 속성에 Clickable 옵션을 true로 설정하여 사용
더보기
1개의 버튼을 만들기 위해 15개의 버튼 이미지 필요
- 이미지 : normal(기본), pressed(동작할 때), disable(비활성화)
- 해상도 처리 : hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi
CheckBox
- 체크 박스 : 항목을 선택할 때 쓰이는 네모 칸
EditText
- 텍스트를 입력할 수 있는 필드
- android: hint = "아이디를 입력하세요" : 어떤 값을 입력해야 되는지 사용자에게 알려줌
- android: inputType = "number" : 입력 란의 타입에 따라 키페드 속성도 바뀜
더보기
키보드 타입 설정 값
- text : 일반적인 텍스트 키보드
- phone : 전화번호 입력 키보드
- textEmailAddress : @문자를 가진 텍스트 키보드
키보드 행위 설정 값
- textCapWords : 문장의 시작을 대문자로 변환
- textAutoCorrect : 입력된 단어와 유사한 단어를 제시하고 제시된 단어 선택 시, 입력된 단어를 대치
- textMultiLine : 여러 줄을 입력 받을 수 있음
ImageView
- 화면에 보여지는 이미지
- 다운로드 이미지 삽입 : 'image' Ctrl+C > res > drawable > Ctrl V
- android: src = "@drawable/image" = drawable 리소스 지정하여 사용
더보기
이미지 파일 사용
- .jpg, .png 가능하나 투명도 이슈로 대부분 .png 사용
이미지 파일 명
- "아이콘.png" : 한글 사용 X
- "ABC.png" : 대문자 사용 X
- "2image.png" : 숫자로 시작 X
- "_image_2.png" : '_'로 시작 O
- "my_image_2.png" : 적합 O
- android: scaleType = "Center" : ImageView 영역과 이미지의 크기가 항상 같을 수 없기 때문에 ImageView의 영역에 맞게 이미지 확대 및 축소
더보기
- Center : 이미지의 크기와 비율을 유지하며 이미지의 중앙을 ImageView의 중심에 맞춤 (이미지가 ImageView 보다 클 경우 잘릴 수 있음)
- centerCrop : 이미지의 비율을 유지하며 가로, 세로 중 짧은 쪽을 ImageView에 꽉 차게 출력
- centerInside : 이미지의 가로, 세로 중 긴 쪽을 ImageView의 레이아웃에 맞춰 출력
- fitCenter : centerInside 유사하나, 이미지의 크기가 ImageView보다 작다면 ImageView의 크기에 따라 달라짐
- fitStart : ImageView 안에서 가로, 세로 비율을 유지하며 fit하게 출력(왼쪽 상단 기준)
- fitEnd : ImageView 안에서 가로, 세로 비율을 유지하며 fit하게 출력(오른쪽 상단 기준)
- fitXY : 가로, 세로 비율 상관없이 ImageView에 꽉 차게 출력 (이미지가 찌그러짐)
- matrix : 이미지의 크기, 비율을 유지하며 ImageView의 좌측상단을 기준을 정렬
ListView
- 리스트 형태
ProgressBar
- 프로그래스바 : 로딩이 진행 중일때, 진행된 정도와 남은 양을 바 형태로 보여주는 인디케이터
RadioGroup & RadioButton
- 라디오 버튼 : 옵션 선택 영역 내의 몇 가지 옵션에서 하나를 선택
- RadioGroup 안에서 RadioButton을 사용
- android:orientation="horizontal" : 정렬
RatingBar
- 등급을 평가하는 데 많이 쓰이는 형태
- android: numStars = "6" : 별 갯수 설정
- android: rating = "2.5" : 처음 값을 결정
- android: stepSizw = "0.1" : 값의 단위를 바꿔줌
SeekBar
- 볼륨 조절 컨트롤러 및 음악 플레이로 많이 사용하는 형태
- android: max = "200" : 최대값 설정
ScrollView
- 화면이동 : 레이아웃이 쌓이면서 화면이 넘어갈 때 화면이동이 필요할 때 사용
- constraintStart_toStartOf + constraintEnd_toEndOf = "parent" 일 때, width 값을 0으로 하면 최대공간 만큼 차지한다는 뜻이기 때문에 구역을 나눠서 스크롤뷰를 지정할 때 사용하면 좋음
Switch
- 스위치 : 다른 하나로 전환하는 버튼
TextView
- 화면에 텍스트를 보여주는 라벨
- android: textColor = "#111111" : RGB 값 입력(좌측 색상 클릭 후 수정 가능) 또는 values > colors.xml 값 사용
- android: textSize = "12sp" : 사이즈 단위 'sp'
- android: Style = "bold" : 텍스트 스타일 (bold, normal, italic)
- android: typeface = "normal" : 텍스트 폰트 (sansm serif, monspace)
- style = "@style/스타일명" : values > styles.xml 활용 가능
더보기
텍스트 뷰를 30개 만든다고 가정할 때, 크기를 변경해야 하는 상황에서 30개의 크기를 하나씩 변경하는 것은 비효율적이기 때문에 스타일을 만들어 한꺼번에 수정 가능
- android: layout_width = "match_parent" : 부모(상위의 레이아웃)의 길이에 따름
- android: layout_height = "wrap_content" : 텍스트 크기에 따라서 길이가 결정
- app: layout_ constraintStart_toStartOf = "parent" : 선택영역의 왼 끝과 전체 영역의 왼 끝으로 연결하여 사용(End : 오, Top : 위, Bottom : 아래)
- app: layout_contraintTop_toBottomOf="@id/iv_profile" : 선택영역의 위 끝과 지정ID 아래 끝으로 연결하여 사용
- andriod: layout_ marginStart = "50dp" : 위젯의 크기를 기준으로 (오,왼,위,아,전체)바깥의 공간을 띄우는 것
더보기
- px, in, mm : 스크린의 실제 단위는 pixel 방식이지만, px로 view의 크기를 설정하면 디스플레이 해상도에 따라 view의 크기가 달라 보일 수 있음
- dp : 밀도에 독립적인 단위로 해상도에 맞게 자동으로 늘어나 그에 맞게 크기가 배치 됨
- android: padding = "50dp" : 위젯의 크기를 기준으로 (오,왼,위,아,전체)안쪽의 공간을 띄우는 것
- android: gravity = "center_horizontal" : 해당 뷰 안의 내용물 위치에 대한 정렬방식 지정
더보기
- center : 부모 뷰의 중앙에 위치
- center_horizontal : 부모 뷰의 수평기준으로 중앙에 위치
- center_vertical : 부모 뷰의 수직기준으로 중앙에 위치
- end : 부모 뷰에서 텍스트 방향의 끝에 위치 (한,영 경우 오른쪽)
- left : 부모 뷰에서 왼쪽에 위치
- right : 부모 뷰에서 오른쪽으로 위치
- top : 부모 뷰에서 위쪽에 위
- bottom : 부모 뷰에서 아래 쪽에 위치
- android: layout_gravity = "center" : 위젯 위치에 대한 정렬방식 지정
- android: maxLength = "5" : 띄어쓰기를 포함하여 최대 보여지는 글자 수
- android: maxLines = "1" : 여러 줄 일때 보여지는 최대 줄 수 (minLines)
- android: singleLine = "true" : 여러 줄을 한 줄로 만듦
- android: ellipsize = "end" : singleLine일 경우, 말 줄임 위치 (start, middle, none, marquee)
- none : 내용이 길어도 잘려서 보임
- **marquee : 화면상에서 좌우로 움직이며 내용을 전부 보여줌
더보기

예시 원본

maxLength = "5"

maxLines = "1"

singleLine = "true"

ellipsize = "end"





ToggleButton
- 토글 버튼 : 손가락으로 직접 스위치를 이동시켜 on/off 상태를 변경
2. 레이아웃(Layout)
- ViewGroup의 서브 클래스로서, 다른 뷰(위젯 혹은 레이아웃)를 정렬하는 기능을 지닌 UI 요소
ConstraintLayout
- 제약 조건을 사용해 화면을 구성하는 방법
- 다른 레이아웃에서 불가능 했던 기능을 유연하고 다양하게 가능
- constraint 툴바 사용
더보기
- Autoconnect : 활성화 시, 위젯을 배치할 때 자동으로 이웃한 위젯과 관계를 맺어줌
- Default Margins : 위젯 간의 기본 마진 값을 지정
- Clear All Constraints : 모든 관계를 삭제
- Infer constraints : 레이아웃 내 배치된 모든 위젯을 현재 위치를 기반으로 관계를 맺어줌
- Guidelines : 수평, 수직 가이드라인을 만들 수 있고, 위젯을 이 가이드라인을 기준으로 정렬 가능
FrameLayout
- 배경 레이아웃 위에 이미지 레이아웃이 보일 수 있게 겹겹히 뒤집어 씌우는 화면을 구성하는 방법
- 여러 View 위젯을 자식으로 추가하면 겹쳐진 형태로 표시되며, 가장 최근에 추가한 것이 가장 상위에 표시
LinearLayout
- 수평 또는 수직으로 일렬로 배치해 화면을 수정하는 방법
- andriod:orientation = "vartical" : 수평/수직 나열 방향 선택 (horizontal)
- 위젯의 크기에 상관없이 한 줄로만 배열되며, 중첩은 불가하고 지정한 방향으로 쌓이는 형태
- android: layout_weight = "1" : 전체 영역 대비 비율의 개념으로 지정할 수 있는 weight(가중치) 설정
RelativeLayout
- 서로 간의 상대적 배치 관계에 따라 화면에 표시 될 위치가 결정되도록 만드는 방법
- 상대적인 배치 기준을 정하지 않는다면, 내부에서 중첩되서 표시
- android: layout_alignParentTop = "true" : 컨테이너 (오,왼,위,아) 가장자리에 맞춤
- android: layout_centerVitical = "true" : (수평,수직) 방향으로 컨테이너의 가운데 배치
더보기
위젯끼리의 관계를 지칭 : id 지정
- layout_alignBaseline : 지정 id와 baseline을 맞춤
- layout_alignBottom : 지정 id와 아래쪽 가장자리를 맞춤
- layout_alignTop : 지정 id와 위쪽 가장자리를 맞춤
- layout_alignLeft : 지정 id와 왼쪽 가장자리를 맞춤
- layout_alignRight : 지정 id와 오른쪽 가장자리를 맞춤
- layout_Above : 지정 id의 위쪽에 배치
- layout_Below : 지정 id의 아래쪽애 배치
- layout_toLeft : 지정 id의 왼쪽에 배치
- layout_toRight : 지정 id의 오른쪽에 배치
TableLayout
- 표 형식(행과 열로 구성)으로 차일드를 배치하는 방법
- <TableRow></TableRow> : 정해진 규칙에 따라 크기가 결정되므로, layout_width/height 지정할 필요 없음
활용 예제
더보기


UI 레이아웃 구성
- LinearLayout내에 3개의 Layout을 추가하고 각각의 weight를 1로 사용
- Linear Layout
- Button3개를 세로로 배치
- Layout_gravity를 이용해 위치 조정
- Relative Layout
- Layout margin : 10dp
- Button5를 우측 상단에 고정
- Button4를 Button5 왼쪽에 배치, 오른쪽margin20dp
- Button6을 Button4 아래로 배치, 왼쪽margin10dp
- Constraint Layout
- Button7을 레이아웃 중앙에 배치
- Button8을 Button7 오른쪽 같은 높이에 배치, 왼쪽margin20dp
- Button9를 Button7 아래로 배치
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F44336"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#9C27B0"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BUTTON1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="BUTTON2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="BUTTON3" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="#4CAF50">
<Button
android:id="@+id/btn_button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_toLeftOf="@+id/btn_button5"
android:text="BUTTON4" />
<Button
android:id="@+id/btn_button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="BUTTON5" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_button4"
android:layout_marginLeft="10dp"
android:text="BUTTON6" />
</RelativeLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#FFEB3B">
<Button
android:id="@+id/btn_button7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BUTTON7"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="BUTTON8"
app:layout_constraintStart_toEndOf="@+id/btn_button7"
app:layout_constraintTop_toTopOf="@+id/btn_button7" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BUTTON9"
app:layout_constraintStart_toStartOf="@+id/btn_button7"
app:layout_constraintTop_toBottomOf="@+id/btn_button7" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
(최종 수정일 24.03.26)
'Android' 카테고리의 다른 글
Android studio_ 5. Shared Preferences (0) | 2024.02.21 |
---|---|
Android studio_ 4. NavigationView (1) | 2024.02.13 |
Android studio_ 3. ListView, GridView (1) | 2024.02.09 |
Android studio_ 2. Toast 메시지 (0) | 2024.01.31 |
Android studio_ 1. Activity와 Intend(화면 이동) (0) | 2024.01.30 |