Android studio programming

(22.11.05)Android Studio ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๊ธฐ๋ณธ ์œ„์ ฏ ํ™œ์šฉํ•˜๊ธฐ(์ปดํŒŒ์šด๋“œ๋ฒ„ํŠผ-์ฒดํฌ๋ฐ•์Šค,ํ† ๊ธ€๋ฒ„ํŠผ,๋ผ๋””์˜ค๋ฒ„ํŠผ,์ด๋ฏธ์ง€๋ฒ„ํŠผ)

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2022. 11. 5.

โ—์ปดํŒŒ์šด๋“œ ๋ฒ„ํŠผโ—

 

ComoundButton ํด๋ž˜์Šค๋Š” Button ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์ฒดํฌ๋ฐ•์Šค, ๋ผ๋””์˜ค๋ฒ„ํŠผ, ์Šค์œ„์น˜, ํ† ๊ธ€๋ฒ„ํŠผ์˜ ์ƒ์œ„ ํด๋ž˜์Šค์ด๋‹ค. ์ด ๋„ค๊ฐ€์ง€ ๋ฒ„ํŠผ์˜ ๊ณ ํ†ต์ ์€ ์ฒดํฌ ๋˜๋Š” ์–ธ์ฒดํฌ ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

์ฒดํฌ๋ฐ•์Šค๋Š” ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ์ฒดํฌ, ์–ธ์ฒดํฌ๋กœ ๋ฐ”๋€๋‹ค. ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ์žˆ์–ด๋„ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์–ด ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋™์‹œ์— ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฒดํฌ๋ฐ•์Šค์˜ XML์ฝ”๋“œ

<CheckBox
	anroid:id="@+id/android"
    android:text="์•ˆ๋“œ๋กœ์ด๋“œ ํฐ"
    android:Checked="true"/>

4ํ–‰์˜ Checked="true"๋กœ ์„ค์ •ํ•˜๋ฉด ์ฒดํฌ๋ฐ•์Šค์—  ์ฒดํฌ๋˜์–ด ์žˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Java ์ฝ”๋“œ์—์„œ๋Š” ๊ฐ•์ œ๋กœ ์ฒดํฌ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋„๋Š” setChecked(), ์ฒดํฌ ์ƒํƒœ๋ฅผ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๊พธ๋Š” toggle(), ์ฒดํฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” isChecked() ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค. ์ฒดํฌ๋ฐ•์Šค๋„ TextViewํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๋ฏ€๋กœ OnClickListener, OnTouchListener๋“ฑ์˜ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

1
2
3
4
5
6
7
CheckBox mycheck;
mycheck = (CheckBox)findViewById(R.id.android);
mycheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
        //๋™์ž‘ ๋‚ด์šฉ ์ด ๋ถ€๋ถ„์— ์ฝ”๋”ฉ
    }
});
cs

์ฒดํฌ๋ฐ•์Šค ์ฒดํฌ ์–ธ์ฒดํฌ ์ ˆ์ฐจ๋Š” ๋ฒ„ํŠผ์˜ ํด๋ฆญ๊ณผ ์ ˆ์ฐจ๊ฐ€ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค. 1ํ–‰์—์„œ ์ฒดํฌ๋ฐ•์Šค ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํ•ด์ฃผ๊ณ  

2ํ–‰ ๋ณ€์ˆ˜์— ์ฒดํฌ๋ฐ•์Šค ์œ„์ ฏ ๋Œ€์ž… 3์—ด ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ๋ณ€๊ฒฐ๋  ๋•Œ ๋™์ž‘ํ•˜๋Š” ํด๋ž˜์Šค ์ •์˜

5ํ–‰์— ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ๋™์ž‘ํ•  ๋‚ด์šฉ์„ ์ฝ”๋”ฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


 

์Šค์œ„์น˜์™€ ํ† ๊ธ€ ๋ฒ„ํŠผ

์Šค์œ„์น˜์™€ ํ† ๊ธ€ ๋ฒ„ํŠผ์€ ๋ชจ์–‘๋งŒ ์กฐ๊ธˆ ๋‹ค๋ฅผ๋ฟ ์šฉ๋„๋Š” ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค. ์Šค์œ„์น˜์˜ ์ฃผ๋œ ๊ธฐ๋Šฅ์€ on/off์ƒํƒœ ํ‘œ์‹œ์ด๋‹ค.

 

1
2
3
4
5
6
7
8
<Switch
    android:Checked="true" />
<Switch
    android:Checked="false" />
<ToggleButton
    android:Checked="true" />
<ToggleButton
    android:Checked="false" />
cs

XML์—์„œ ์Šค์œ„์น˜์™€ ํ† ๊ธ€ ๋ฒ„ํŠผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


๋ผ๋””์˜ค๋ฒ„ํŠผ๊ณผ ๋ผ๋””์˜ค ๊ทธ๋ฃน

๋ผ๋””์˜ค ๋ฒ„ํŠผ์€ XML์†์„ฑ์ด๋‚˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ฒดํฌ๋ฐ•์Šค์™€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ ์šฉ๋„๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์„ฑ๋ณ„์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๊ฐœ์ค‘์— ํ•˜๋‚˜๋งŒ ์„ ํƒํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ผ๋””์˜ค ๋ฒ„ํŠผ๋งŒ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์—ดํ•˜๋ฉด ํด๋ฆญํ•˜๋Š” ๊ฒƒ๋งˆ๋‹ค ๋ชจ๋‘ ์ค‘๋ณต์œผ๋กœ ์„ ํƒ๋˜๋ฏ€๋กœ ๋ผ๋””์˜ค๊ทธ๋ฃน๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

๋ผ๋””์˜ค ๊ทธ๋ฃน๊ณผ ๋ผ๋””์˜ค๋ฒ„ํŠผ์˜ XML์ฝ”๋“œ

1
2
3
4
5
6
7
<RadioGroup
    android:id="@+id/rGroup1">
    <RadioButton
        android:text="๋‚จ์„ฑ"/>
    <RadioButton
        android:text="์—ฌ์„ฑ"/>
<RadioGroup/>
cs

2๊ฐœ์˜ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์„ ํ•˜๋‚˜์˜ ๋ผ๋””์˜ค ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์—ˆ๋‹ค. ๋ผ๋””์˜ค ๊ทธ๋ฃน์•ˆ์˜ ๋ชจ๋“  ๋ผ๋””์˜ค ๋ฒ„ํŠผ์€ ํ•˜๋‚˜๋งŒ ์„ ํƒ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ๋ผ๋””์˜ค ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์€ ๊ฐ ๋ผ๋””์˜ค๋ฒ„ํŠผ์˜ id ์†์„ฑ์ด ๊ผญ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. id ์†์„ฑ์ด ์—†์œผ๋ฉด ํ•ด๋‹น ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด ๊ณ„์† ์„ ํƒ๋œ ๊ฒƒ์œผ๋กœ ์ง€์ •๋˜์–ด ํ•ด์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.


์ด๋ฏธ์ง€๋ทฐ์™€ ์ด๋ฏธ์ง€๋ฒ„ํŠผ

์ด๋ฏธ์ง€๋ทฐ๋Š” ๊ทธ๋ฆผ์„ ์ถœ๋ ฅํ•˜๋Š” ์œ„์ ฏ์œผ๋กœ ๊ทธ๋ฆผ์„ ๋„ฃ๊ฑฐ๋‚˜ ํ™”๋ฉด์„ ํ™”๋ คํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฏธ์ง€๋ทฐ์— ๋ณด์—ฌ์ค„ ๊ทธ๋ฆผ ํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ [res]-[drawable] ํด๋”์— ์žˆ์–ด์•ผํ•œ๋‹ค.

์ ‘๊ทผ์€ XML์—์„œ "@drawable/๊ทธ๋ฆผ ์•„์ด๋””" ํ˜•์‹์œผ๋กœ ํ•œ๋‹ค.

 

ImageView ํด๋ž˜์Šค๋Š” Viewํด๋ž˜์Šค์—์„œ ๋ฐ”๋กœ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์•ž์„  ๋‹ค๋ฅธ TextView์˜ ํ•˜์œ„ ์œ„์ ฏ๋“ค๊ณผ ์†์„ฑ์ด ๋‹ค๋ฅด๋‹ค. ImageButton ํด๋ž˜์Šค๋Š” ImageView ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์œผ๋ฉฐ ๊ฑฐ์˜ ๋™์ผํ•œ ์šฉ๋„๋กœ ์“ฐ์ง€๋งŒ ๋ฒ„ํŠผ์ฒ˜๋Ÿผ ํด๋ฆญํ•˜๋Š” ๋ฐ ์“ฐ์ธ๋‹ค. 

์ด๋ฏธ์ง€๋ทฐ์™€ ์ด๋ฏธ์ง€๋ฒ„ํŠผ์˜ XML ์†์„ฑ์œผ๋กœ๋Š” ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” src, ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” maxHeight/MaxWidth, ์ด๋ฏธ์ง€์˜ ํ™•๋Œ€/ ์ถ•์†Œ ๋ฐฉ์‹์„ ์ง€์ •ํ•˜๋Š” scaleType๋“ฑ์ด ์žˆ๋‹ค.

 

์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋จผ ๋จผ์ € ๊ทธ๋ฆผ ํŒŒ์ผ์„ [res]-[drawable] ํด๋„์— ๋ณต์‚ฌํ•ด ๋†“์•„์•ผํ•œ๋‹ค. (์œ„ ์‚ฌ์ง„์˜ ์ฒซ๋ฒˆ์งธ ๋นจ๊ฐ„ ๋ฐ•์Šค)

ํŒŒ์ผ ํฌ๋งท์€ png, jpg,gif๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ png๋‚˜ jpg๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค. 

์œ„ ์‚ฌ์ง„์˜ ๋‘๋ฒˆ์งธ ๋นจ๊ฐ„ ๋ฐ•์Šค์ธ [mipmap]์— ๊ฐ™์€ ์ด๋ฆ„์˜ ์•ฑ ์•„์ด์ฝ˜ ์ด๋ฏธ์ง€(ic_launcher.png)๊ฐ€ ๋””ํดํŠธ๋กœ ๋“ค์–ด ์žˆ๋Š”๋ฐ, ๊ฐ๊ฐ์€ ๊ฐ™์€ ์ด๋ฏธ์ง€์ด์ง€๋งŒ ํ•ด์ƒ๋„๊ฐ€ mdpi(48×48), hdpi(72×72), xhdpi(96×96), xxhdpi(144×144), xxxhdpi(192×192) ๋“ฑ์œผ๋กœ ๋‹ค๋ฅด๋‹ค. ์ด๋Š” ๋ชจ๋‘ xml ํŒŒ์ผ์—์„œ๋Š” @mipmap/ic_launcher๋กœ , Java ์ฝ”๋“œ์—์„œ๋Š” R.mipmap.ic_launcher๋กœ ์‚ฌ์šฉ๋œ๋‹ค. 

 

์ด๋ฏธ์ง€๋ทฐ์™€ ์ด๋ฏธ์ง€ ๋ฒ„ํŠผ์˜ xml ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ImageView
    android:src="@drawable/icon.png"/>
<ImageButton
    android:src="@drawable/icon.png"/>
<ImageView
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:scaleType="fitXY"
    android:src="@drawable/icon.png"/>
<ImageView
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:scaleType="fitCenter"
    android:src="@drawable/icon.png"/>
cs

1ํ–‰ ๊ธฐ๋ณธ์ ์ธ ImageViewํ˜•์‹์ด๋‹ค.

2ํ–‰์—์„œ [res]-[drawable]์˜ ์ด๋ฏธ์ง€ ์•„์ด๋””๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

3,4ํ–‰ ๊ธฐ๋ณธ์ ์ธ ImageButton ํ˜•์‹์ด๋‹ค.

 

6,7ํ–‰ ImageView์˜ ํฌ๊ธฐ ํ™•๋Œ€ 8ํ–‰์€ ์ด๋ฏธ์ง€๋ฅผ ํ™•๋Œ€ํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€์ •ํ•œ๋‹ค. fitXY๋Š” ์ด๋ฏธ์ง€๋ทฐ์˜ ์ขŒ์šฐ์— ๊ฝ‰ ๋งž์ถฐ์„œ ์ด๋ฏธ์ง€๋ฅผ ํ™•๋Œ€ํ•˜๊ณ  13ํ–‰์˜ fitCenter๋Š” ์ค‘์•™์— ๋งž์ถฐ์„œ ํ™•๋Œ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด์™ธ์—๋„ matrix, fitStart, fitEnd, center, centerCrop, centerInside ๋ฐฉ์‹์ด ์žˆ๋‹ค.

๋Œ“๊ธ€