
인프런
강의명 : [왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
parent부분 수정 <style name="Theme.MyApplication" parent="Theme.AppCompat.Light">refector <ImageView
	android:src="@drawable/imageName"
    android:layout_width="100dp"
    android:layout_height="100dp"/>Linear Layout Relative LayoutConstraint LayoutsetContentView
class MainActivity : AppCompatActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
    }
}findViewById
: 리소스 id를 통해 레이아웃에 있는 뷰 객체들 중 일치하는 뷰를 가져오는 메소드.
Toast
: Toast 메세지를 띄운다.
Toast.makeText(context, text, duration).show()setOnClickListener
: 버튼 클릭 시 수행할 동작을 지정하는 리스너
val image = findViewById<ImageView>(R.id.imageName)
image.setOnClickListener{
   Toast.makeText(this, "클릭 완료", Toast.LENGTH_LONG).show()  
}Intent
: 여러 화면 간의 이동을 할 수 있도록 해주는 것.
val image = findViewById<ImageView>(R.id.imageName)
image.setOnClickListener{
     Toast.makeText(this, "클릭 완료", Toast.LENGTH_LONG).show() 
     
     val intent = Intent(this, SecondActivity::class.java)
     startActivity(intent)
}SplashActivity  생성manifests 파일 수정<activity android:name=".SplashActivity">
		<intent-filter>
        	<action android:name = "android.intent.action.MAIN" />
            
            <category android:name = "android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
<activity android:name = ".MainActivity">
</activity>SplashActivity가 먼저 뜨게 만듦HandlerSplashActivity	에서 Handler 사용Handler().postDelayed({
	startActivity(Intent(this, MainActivity::class.java))
    finish()
}, 3000)values -> themes.xml 에 밑의 코드 추가
<item name = "windowNoTitle">true</item>scaleType: 이미지를 출력하는 속성
android:scaleType = "center"
: 이미지 원본 크기와 비율을 유지하며 이미지의 중앙을 layout_width, layout_height 안에 출력한다. 이 때 레이아웃보다 이미지가 크면 레이아웃의 벗어난 이미지는 출력되지 않은다. 레이아웃보다 이미지가 작으면 이미지를 center 정렬 한다.
android:scaleType="centerCrop”
: 이미지의 가로/세로의 길이 중 짧은 쪽을 ImageView의 레이아웃에 꽉 차게 크기를 맞춰서 출력한다. 이 때 원본 이미지 가로/세로의 비율은 유지되고 레이아웃 영역에서 벗어난 이미지는 출력되지 않는다.
android:scaleType="centerInside”
:이미지의 가로/세로의 길이 중 긴 쪽을 ImageView의 레이아웃에 맞춰서 출력한다. 이 때 원본 이미지의 가로/세로의 비율은 유지되고 레이아웃에 이미지외 빈공간은 background 속성의 color로 채워진다. fitCenter와 다른점은 원본 이미지가 ImageView이 레이아웃보다 작다면, 이미지의 크기가 유지 된다는 것이다
android:scaleType="fitCenter”
: 이미지의 가로/세로의 길이 중 긴 쪽을 ImageView의 레이아웃에 맞춰서 출력하다. 이 때 원본 이미지의 가로/세로의 비율은 유지되고 레이아웃에 이미지외 빈공간은 background 속성의 color로 채워진다. centerInside와 다른점은 이미지의 크기가 ImageView의 레이아웃에 크기에 따라 변한다는 것이다.
android:scaleType="fiStart”
: ImageView 레이아웃 안에서 이미지의 가로/세로 비율을 유지하며 출력되지만 ImageView의 레이아웃의 왼쪽 상단을 기준으로 정렬된다.
android:scaleType="fitEnd”
: ImageView 레이아웃 안에서 이미지의 가로/세로 비율을 유지하며 출력되지만 ImageView의 레이아웃의 오른쪽 하단을 기준으로 정렬된다.
android:scaleType="fitXY”
: 가로/세로 비율에 상관없이 ImageView의 레이아웃의 각 면에 꽉 차게 출력된다.
android:scaleType="matrix”
: 이미지 원본의 크기와 비율을 유지하며 이미지 원본대로 왼쪽 상단을 기준으로 출력된다. 이미지가 ImageView의 레이아웃 보다 크다면 나머지 이미지는 출력되지 않는다.
CardViewstrokeWidth : 테두리 두께 지정strokeColor : 테두리의 Color 지정cardCornerRadius : 모서리의 둥근 정도 지정. 지정한 값의 정도에 따라 타원형으로 만들 수도 있다.cardBackGroundColor : CardView의 Background Color 지정contentPadding : CardView의 Padding 지정cardElevation : cardview주변에 그림자 부여cardUseCompatPadding : CardView에 그림자를 부여하면 그림자가 생긴만큼 다른 공간에 영향을 미칠 수 있다.따라서 이를 True로 줌으로써 그림자가 표시될 공간을 만들어준다.build.gradle에 밑의 코드 추가하고 Sync Nowimplementation "androidx.cardview:cardview:$version"<androidx.cardview.widget.CardView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 app:cardCornerRadius="50dp" // 모서리 반경 설정
 android:layout_margin="10dp"
 >
 <ImageView
     android:id="@+id/member1"
     android:scaleType="fitXY"
     android:src="@drawable/member_1"
     android:layout_width="120dp"
     android:layout_height="150dp"
     />
</androidx.cardview.widget.CardView>Intent putExtraval intent = Intent(this, ImageInsideActivity::class.java)
intent.putExtra(name: "data", value: "1")
startActivity(intent)val getData = intent.getStringExtra(name: "data")setImageResource: 이미지에 접근
imageView.setImageResource(R.drawable.image_sample)Databinding-> MVVM 패턴!
build.gradle 파일 아래와 같이 수정 후 Sync Now
 android{
 	...
    databinding{
    enabled = true
    }
 }xml 파일을 layout으로 감싸기
<?xml version="1.0" encoding="utf-8"?> 
<layout>
	<androidx.constraintlayout.widget.ConstraintLayout
 		 .....
    </androidx.constraintlayout.widget.ConstraintLayout> 
</layout>Activity.kt에서 코드 변경
class MainActivity : AppCompatActivity() {
	private lateinit var binding : ActivityMainBinding
		override fun onCreate(savedInstanceState: Bundle?) {
      		super.onCreate(savedInstanceState)
  			binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
		}
}dataBinding 사용 예
binding.textBtnBind.setOnClickListener{
	Toast.makeText(this, "click", Toast.LENGTH_LONG).show()
}var : 값이 변할 수 있음val : 값이 변하지 않음Log
Log.d(tag: "MainActivity", msg: "testLog") -> 디버그Log.e(tag: “MainActivity”, msg: "testLog") -> 오류Log.w(tag: “MainActivity”, msg: "testLog") -> 경고Log.i(tag: “MainActivity”, msg: "testLog") -> 정보Log.v(tag: “MainActivity”, msg: "testLog") -> 상세Random.nextInt(from, until)
android:fontFamily = "@font/fontName"ListView 생성ListView에 담길 item xml 파일 생성 (ex. listview_item.xml)ListView에 listview_item 연결  <ListView
  ...
  tools:listitem="@layout/listview_item"
  />Adapter 생성Adapter 의 구성 요소getCount() : 리스트뷰의 개수getItem()getItemId()getView() : listview_item과 연결!!onBackPressed()// 더블클릭 시 종료!!
override fun onBackPressed() {
    if(isDouble == true){
        finish()
    }
    isDouble = true
    Toast.makeText(this, "종료하시려면 더블클릭", Toast.LENGTH_LONG).show()
    Handler().postDelayed({
        isDouble = false
    }, 2000)
 }random() !!
binding.goodWordTextArea.setText(sentenceList.random())이렇게 4가지 앱을 만들면서 활용한 것들에 대해 정리해보았다.
다음 글에서 남은 4가지 앱을 만들면서 활용할 것들에 대해 마저 정리하겠다.