-
TECHIT 앱 스쿨 2기: Android 43일차 (23.06.28)[THEC!T] 앱 스쿨2기 : Android 2023. 6. 29. 03:19728x90
자료 출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 내용
오늘은 ActionBar 내 액션 아이템들 에 대한 내용으로부터 시작하였습니다.
주요 속성은 하기와 같습니다.
None : ActionBar에 표시하지 않는다.
Always : 항상 ActionBar에 표시된다.
ifRoom : 표시할 수 있는 공간이 있을 경우 ActionBar에 표시된다.
Icon : ActionBar에 표시될 때 사용할 아이콘을 지정한다.
withText : 공간이 허락될 경우 아이콘과 함께 문자열을 표시한다.다음으로는 ActionView에 대해서 배웠습니다.
간단히 설명하자면 검색 기능을 만들 때 사용하며, ActionBar에 배치하는 View 입니다.
ActionView 을 사용하기 위한 주요 부분
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main_menu, menu) val item1 = menu?.findItem(R.id.item1) val searchView = item1?.actionView as SearchView searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{ override fun onQueryTextSubmit(query: String?): Boolean { // 키보드의 검색 버튼을 클릭한 순간 발생하는 이벤트 return false } override fun onQueryTextChange(newText: String?): Boolean { // 검색어가 변경될 때 발생하는 이벤트 if(newText != null){ } return false } })
또한 강사님께서 리스트뷰를 이용하여 리스트뷰의 정보가 갱신하는 법을 알려주셨고, 리사이클러뷰의 정보를 갱신하는 방법은 한번 찾아보라고 하셨습니다. (아직 알려주신 상태는 아닙니다.)
그래서 검색을 통하여 해당 기능을 구현을 하긴 하였으나, 최적의 방법이 아닐 수 있습니다.
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{ override fun onQueryTextSubmit(query: String?): Boolean { // 키보드의 검색 버튼을 클릭한 순간 발생하는 이벤트 return false } override fun onQueryTextChange(newText: String?): Boolean { // 검색어가 변경될 때 발생하는 이벤트 if(newText != null){ var updateList = foodList.filter { it.contains(newText) } as MutableList<String> val newadapter = RecyclerAdapter() newadapter.filter(updateList) activityMainBinding.mainRycView.adapter = newadapter } return false } })
inner class RecyclerAdapter : RecyclerView.Adapter<RecyclerAdapter.ViewHolderClass>(){ var filterList = mutableListOf<String>() inner class ViewHolderClass(rowBinding: RycRowBinding): ViewHolder(rowBinding.root){ var food : TextView init{ food = rowBinding.textView rowBinding.root.setOnClickListener { val builder = AlertDialog.Builder(this@MainActivity) builder.setTitle("선택한 재료") builder.setMessage("${filterList[adapterPosition]}을 선택하셨습니다.") builder.setPositiveButton("확인", null) builder.show() } } } fun filter(filter : MutableList<String>){ filterList = filter notifyDataSetChanged() } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass { val rowBinding = RycRowBinding.inflate(layoutInflater) val viewHolderClass = ViewHolderClass(rowBinding) val params = RecyclerView.LayoutParams( RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT ) rowBinding.root.layoutParams = params return viewHolderClass } override fun getItemCount(): Int { return filterList.size } override fun onBindViewHolder(holder: ViewHolderClass, position: Int) { holder.food.text = filterList[position] } }
이 후에는 back버튼 혹은 업버튼 이라고 불리는 에 대해서 알려주셨습니다.
해당 버튼의 기능은 액티비티 화면이 앱의 첫 화면 이 아닐 때 이전 화면으로 되돌아 가는 기능을 합니다.
주요코드
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_second) // HomeButton을 활성화 한다. supportActionBar?.setHomeButtonEnabled(true) // HomeButton을 노출시킨다. supportActionBar?.setDisplayHomeAsUpEnabled(true) // 아이콘을 변경한다. // supportActionBar?.setHomeAsUpIndicator(R.mipmap.ic_launcher) } override fun onOptionsItemSelected(item: MenuItem): Boolean { when(item.itemId){ // 백버튼 android.R.id.home -> { // 현재 Activity를 종료한다. finish() } } return super.onOptionsItemSelected(item) }
다음으로는 툴바에 대해서 알려주셨습니다.
그런데 보기에는 액션바와 큰 차이가 없지만, 개발자 입장에서는 액션바와 다르게 툴바는 개발자가 직접 제어가 가능하여 액션바보다 다양한 기능을 제공할 수 있습니다.
주요 코드
toolbar.run{ // 타이틀 title = "ToolBar" // 타이틀 글자 색상 setTitleTextColor(Color.WHITE) // 옵션 메뉴를 구성한다. inflateMenu(R.menu.main_menu) setOnMenuItemClickListener { // 사용자가 누른 메뉴의 id로 분기한다. when(it?.itemId){ R.id.item1 ->{ textView.text = "메뉴1을 눌렀습니다." } R.id.item2 ->{ textView.text = "메뉴2를 눌렀습니다." } } setTitleTextColor(Color.WHITE) // 백 버튼 아이콘을 표시한다. setNavigationIcon(androidx.appcompat.R.drawable.abc_ic_ab_back_material) // 백 버튼의 아이콘 색상을 변경한다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){ navigationIcon?.colorFilter = BlendModeColorFilter(Color.WHITE, BlendMode.SRC_ATOP) } else { navigationIcon?.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP) } false } }
이후로는 뷰 바이져2, AppBarLayout, TabLayOut에 대해서 알려주셨고, 해당 내용은 좀 더 정리를 진행한 후 작성 할 수 있도록 하겠습니다.
마무리
요즘 배우는 것에 대한 난이도가 확 올라갔다는 느껴집니다. 당일 복습한 내용을 정리하는데 오래 걸리지 않았지만, 요즘은 기본적으로 3~4시간은 걸리는 것 같습니다. 원인은 그 만큼 복습을 하면서 모르면 알아보고, 조금씩 응용도 해보고 하다보니 더 시간이 걸리는 것도 있습니다. 하지만 장점으로는 비록 일부 부족할 수 있더라도 최소한의 기초공사들을 진행하면서 나아가는 느낌이라 개인적으로는 피곤하면서도 뿌듯한 것 같습니다.
잠은 몰아서 자는걸로.....ㅋㅋㅋ
오늘의 마음가짐
기초공사가 부실한 상태에서 쌓아올려봤자 금방 무너지기에 기초공사를 튼튼히 하자
'[THEC!T] 앱 스쿨2기 : Android' 카테고리의 다른 글
TECHIT 앱 스쿨 2기: Android 46일차 (23.07.04) (1) 2023.07.05 TECHIT 앱 스쿨 2기: Android 44 ~ 45일차 (23.07.03) (0) 2023.07.03 TECHIT 앱 스쿨 2기: Android 42일차 (23.06.27) (0) 2023.06.27 TECHIT 앱 스쿨 2기: Android 41일차 (23.06.26) (0) 2023.06.27 TECHIT 앱 스쿨 2기: Android 40일차 (23.06.23) (0) 2023.06.24