Android InteractiveApp
업데이트:
카테고리: Android
/태그: API, Button, Google Develop, ImageView, LinearLayout, onCreate, srcCompat, tools
무엇을 할건가?
MainActivty
과XML
을 알아본다.Button
에 클릭 메서드를 추가하여 클릭시 메세지가 화면에 보이게 한다.
1. 레이아웃 구성하기
LinearLayout
은 layout_width="match_parent"
로 layout_height="wrap_content"
로 지정한다.
버튼을 제작할 때 Button
과 androidx.appcompat.widget.AppCompatButton
의 방법이 있다.
Button
은 android에 내장되어 있는 버튼으로 배경 색상을 바꾸기 위해서는 themes
의 코드의 배경 색상을 수정해야된다.
AppCompatButton
은 backgorund를 통해서 개별의 색상을 지정해 줄 수 있어 다른 포인트의 버튼을 제작할 때 사용할 듯 하다.
그리고 text를 넣을 때 하드코딩을 하게되면 경고표시가 발생하게 된다.
안드로이드 스튜디오에서는 Resource
를 만들어 관리하는 방법을 추천한다.
이 값은 res > value > strings.xml에 들어있다.
2. MainActivity 살펴보기
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
Activity
는 AppCompatAcitivity
의 서브클래스이다.
onCreate()
는 라이프 사이클 메서드로 앱이 처음 시작될 때 사용된다.
그 안에 있는 SetContentView()
안에 R.layout.activtity_main
을 통해 레이아웃을 사용할 수 있다.
R
클래스에 layout
폴더에 activity_main.xml
파일을 만들어냅니다.
3. 클릭 이벤트 연결하기
Roll
버튼에 setOnClickListener
로 클릭이벤트를 걸어준다.
- 클릭 했을 때 토스트 메세지가 뜨도록 한다.
// Toast는 마지막에 show()를 통해서 화면에 보여주어야 한다. Toast.makeText(this, "버튼을 클릭하였습니다.", Toast.LENGTH_SHORT).show()
- 랜덤한 숫자가 나오도록 한다.
// 1 ~ 6 숫자가 랜덤으로 등작하게 한다. val randomInt = (1..6).random() // 텍스트뷰의 글자를 바꿔주기 위해 형변환후 넣어준다. tvDice.text = randomInt.toString()
- 하단에 카운트 텍스트 작성하기
- 이때
textView
를 Int로 바꾸기 위해서는toString()
으로 변환한 뒤에toInt()
로 숫자로 형변환을 해야한다. - 또는
Integer.parseInt()
를 사용하여 문자를 숫자로 바꿀 수 있다.
- 이때
4. 주사위 이미지 연결하기
주사위 이미지 파일을 다운받아 app > src > main > res > drawable
넣어준다.
주사위 눈이 표시되던 TextView
를 삭제하고 ImageView
를 넣어준다.
src
경로에 drawable
넣어줬던 파일이름을 작성한다.
rollDice()
에 숫자에 따라 맞는 이미지를 when
으로 연결해준다.
val DiceImage: ImageView = findViewById(R.id.dice_image)
val drawableResource = when (randomInt) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
diceImage.setImageResource(drawableResource)
5. 최적화하기
diceImage
를 함수 내부에 작성해주었는데, 이런 경우 버튼을 클릭할때마다 호출이 되므로 최소화 해주기 위해서는 코드 상단에 diceImage
를 nullable하게 하여 미리 정의하는 것이다.
이렇게 되면 diceImage를 어디서든 접근가능하고 성능도 향상시킬 수 있다.
tools란 무엇인가
namespace이며 design-time 속성이다.
실제로 앱이 빌드 될 때는 tools
관련 속성을 제거해 apk 사이즈나 실행되는 앱에 영향을 주지 않는다.
<ImageView
...
android:src="@drawable/empty_dice"
tools:src="@drawable/dice_1"
/>
화면상에 보이는 것은 dice_1
의 이미지가 보이게 되지만 실제 구동될 때는 empty_dice
가 보인다.
API 이해하기
build.gradle(:app)
의 파일에는 아래와 같은 내용이 적혀있다.
compileSdk 33
defaultConfig {
applicationId "ko.cheonsohee.interactiveapp"
minSdk 21
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
compileSdk
: 컴파일시 사용할 버전targetSdkVersion
: 앱을 테스트한 API, 대부분은complieSdk
와 버전을 같이 가져간다.minSdkVersion
: 앱을 구동하기 위한 최소 버전
vector drawavle 호환성 추가
defaultConfig
vectorDrawables.useSupportLibrary true
ImageView
의 android:src
을 app:scrCompat
으로 교체한다.
srcCompat은 모든 안드로이드에서 그림을 동일하게 표현해주는 기능이였다.
이제 최소 API버전이 21이상인 경우 ImageView의 src를 사용하여 이미지를 넣을 수 있고, 21 이전인 경우에만 srcCompat을 사용하여 이미지를 표현해야 했다.
하지만 이제는 대부분의 사용자가 21 이상 버전을 사용하고 있어 srcCompat을 사용할 이유가 사라졌다.