
editText가 관리하는 문자열은 String이 아니라 Editable이다 String일 경우 값을 입력할때마다 String객체가 매번 생성되기 때문에 이를 해결하기 위해 Editable을 따로 만들었으며 이를 사용하기 위해서는 toString으로 변환해주면 된다.

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("test1234","debug")
}
}

로그캣 창의 필터에 필터 문자열로 넣었던 test1234를 입력하면 메시지를 확인할 수 있다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.e("test1234","error")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.i("test1234", "information")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.v("test1234", "verbose")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.w("test1234", "verbose")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.wtf("test1234", "verbose")
}
}


xml파일에서 일반 버튼을 매터리얼 버튼으로 변경한다.
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />


Material 3 라이브러리를 적용해주면 그냥 Button을 사용해도 Material Button처럼 사용할 수 있다.

이는 MaterialButton과 Button이 크게 다르지 않고 다양한 테마를 제공하는 형태로 되어 있기 때문이다.
아이콘은 https://fonts.google.com/icons 여기서 무료로 사용 가능
내려받은 아이콘은 res > drawble 폴더에 넣어줘야함(이름에 언더바 제외한 특수기호 없어야 함)
토글 버튼은 ToggleGroup안에 배치

<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/toggleGroup1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/toggleButton1"
style="@style/Widget.Material3.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="toggle1" />
<Button
android:id="@+id/toggleButton2"
style="@style/Widget.Material3.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="toggle2" />
<Button
android:id="@+id/toggleButton3"
style="@style/Widget.Material3.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="toggle3" />
</com.google.android.material.button.MaterialButtonToggleGroup>
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.apply {
// MaterialButtonToggleGroup 의 버튼을 선택해준다.
toggleGroup1.check(R.id.toggleButton1)
toggleGroup1.check(R.id.toggleButton3)
}
}
}

singleSelection 속성에서 true,false로 설정할 수 있다.
selectionRequired에서 선택 가능하다(체크를 해제해서 아예 선택 안한것처럼 하거나 또는 강제로 선택하게) 대신 singleSelection=true 인 경우에만 설정 가능
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.apply {
// SingleSelection에 true가 설정되어 있는 그룹에 버튼을 선택해준다.
toggleGroup2.check(R.id.toggleButton4)
toggleGroup2.check(R.id.toggleButton5)
}
}
}

class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.apply {
// MaterialButtonToggleGroup 의 버튼을 선택해준다.
toggleGroup1.check(R.id.toggleButton1)
toggleGroup1.check(R.id.toggleButton3)
// 선택 취소
toggleGroup1.check(R.id.toggleButton2)
toggleGroup1.uncheck(R.id.toggleButton2)
}
}
}

class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.apply {
// 그룹 내부의 버튼의 체크 상태가 변경되었을 때
// 두 번째 : 체크 상태가 변경된 버튼의 id
// 세 번째 : 체크되었는지 여부(true/false)
toggleGroup1.addOnButtonCheckedListener { group, checkedId, isChecked ->
// 버튼의 id로 분기한다.
when(checkedId){
R.id.toggleButton1 -> {
if(isChecked){
textView.text = "토글 버튼1이 체크되었습니다."
}else{
textView.text = "토글 버튼1이 체크 해제 되었습니다."
}
}
R.id.toggleButton2 -> {
if(isChecked){
textView.text = "토글 버튼2이 체크되었습니다."
}else{
textView.text = "토글 버튼2이 체크 해제 되었습니다."
}
}
R.id.toggleButton3 -> {
if(isChecked){
textView.text = "토글 버튼3이 체크되었습니다."
}else{
textView.text = "토글 버튼3이 체크 해제 되었습니다."
}
}
}
}
// SingleSelection
toggleGroup2.addOnButtonCheckedListener { group, checkedId, isChecked ->
// 버튼의 id로 분기한다.
when(checkedId){
R.id.toggleButton4 -> {
if(isChecked){
textView.text = "토글 버튼4이 체크되었습니다."
}
}
R.id.toggleButton5 -> {
if(isChecked){
textView.text = "토글 버튼5이 체크되었습니다."
}
}
R.id.toggleButton6 -> {
if(isChecked){
textView.text = "토글 버튼6이 체크되었습니다."
}
}
}
}
buttonResult.setOnClickListener {
textView.text = ""
// toggle1에서 체크되어 있는 버튼들의 아이디를 모두 가져온다.
// SingleSelection이 아니기 때문에 0 개 이상이 선택되어 있을 수도 있다.
toggleGroup1.checkedButtonIds.forEach {
when(it){
R.id.toggleButton1 -> textView.append("토글1이 체크되어 있습니다.\n")
R.id.toggleButton2 -> textView.append("토글2가 체크되어 있습니다.\n")
R.id.toggleButton3 -> textView.append("토글3이 체크되어 있습니다.\n")
}
}
// toggle2에서 체크되어 있는 버튼의 아이디를 가져온다.
// SingleSelection이기 때문에 1개만 가져온다.
when(toggleGroup2.checkedButtonId){
R.id.toggleButton4 -> textView.append("토글4가 체크되어 있습니다.\n")
R.id.toggleButton5 -> textView.append("토글5가 체크되어 있습니다.\n")
R.id.toggleButton6 -> textView.append("토글6이 체크되어 있습니다.\n")
}
}
}
}
}
※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스