Android

[안드로이드/Widget] 다양한 view/widget & 사용법

gangmini 2023. 2. 20. 23:18
반응형

💡 Widget

  • View 중에서 기능을 갖고 사용자와 상호작용하는 것
  • Activity가 실행되면 화면이 구성되고 layout 및 view 모두 객체로 생성
  • 객체로 생성도니 view 중에 필요한 widget들의 주소값을 얻어와(혹은 뷰바인딩을 통해) 코드로 이벤트에 대한 기능을 넣어 사용자와 소통

 

TextView

  • 문자열을 화면에 표시

TextView 주요 속성

  • text : textview로 보여줄 문자열
  • lines : 표시하고자 하는 문자열의 라인 수 (설정 안 하면 여러줄 작성해도 표시 x)
  • textColor : 문자열 색상
  • textSize : 문자열 크기
  • textAppearance : 표시되는 문자열 형식 (위 문자열 크기, 색상, 폰트 등을 종합하여 하나의 스타일로 만들어 놓은것)

TextView 주요 프로퍼티 및 메소드

  • text : textview에 설정된 문자열 가져옴
  • setBackgroundColor :  배경색 지정
  • setTextColor : 문자열 색 지정
  • append : 문자열 추가  

 

EditText

  • 사용자에게 문자열을 입력받을 때 사용

EditText 주요 속성

  • text : 사용자가 입력전 처음 EditText에 표시할 문자열을 설정 (이게 설정되어 있으면 당근 hint는 보이지 않음)
  • hint : 입력된 값이 없을 경우 표시할 안내문구 설정 
  • inputType : 입력값의 종류에 따라 표시되는 형식이나 키보드 설정에 영향 (문자열, 시간, 이메일 등의 타입을 설정하면 해당 타입에 최적화된 키보드가 설정)
  • imeOptions : 나타나는 키보드의 Enter 키 모양 설정 (사이드바 검색하면 엔터키 종류 나옴)

EditText 주요 프로퍼티

  • text : 사용자가 입력한 문자열 값

EditText 주요 이벤트

    • TextWatcher : 사용자가 입력한 내용을 실시간으로 감시하는 인터페이스, 메소드 오버라이딩 필수(매개변수를 활용해 변화를 tracking 할 수 있음)
    • EditAction : 키보드의 Enter 키를 눌렀을 때 발생하는 이벤트 (*고차함수로 지원)

✔️ EditText 뷰의 inputType 속성을 설정해주지 않은 경우 엔터키를 눌러도 엔터 기능을 못하고 줄바꿈 현상이 나타날 수 있음

https://onlyfor-me-blog.tistory.com/435

 

[Android] TextWatcher란?

앱을 만들다 보면 editText에 입력한 값을 실시간으로 관찰하면서 입력값에 따른 처리를 해야 할 때가 있다. 그 때 가볍게 써먹을 수 있는 편리한 TextWatcher란 인터페이스가 있다. 이름부터 뭘 하는

onlyfor-me-blog.tistory.com

binding.editText1.setOnEditorActionListener { textView, i, keyEvent ->
            binding.textView1.text = "엔터 버튼을 눌름"
            binding.TextView2.text = binding.textView1.text
            false 
            // 반환값 필수 (kotlin은 return 안 붙임)
            // false : 키보드 내려감 true : 키보드 안 내려감
        }

TextInputLayout

  • 사용자에게 문자열을 입력받을 때 사용 (EditText와 거의 동일)
  • TextInputLayout 안에 TextInputEditText가 들어가 있는 형태(EditText 객체를 가짐) EditText 프로퍼티를 사용해 입력값을 받아오고 처리

TextInputLayout 주요 프로퍼티

  • editText : TextInputLayout이 가지고 있는 EditText 객체의 주소값을 가져옴
  • error : 입력한 문자열이 조건에 부합하지 않는 경우 오류로 표시할 메시지를 설정
textView1.text = textInputLayout1.editText?.text //editText는 문자열을 가져오기 위해 text 프로퍼티 사용

// textInputLayout1 가 갖고 있는 editText 객체의 값을 가져와 textView1 에 출력
// ? 는 null 가능 문자

 

TextInputLayout 주요 속성

  • hint : 입력한 내용이 없을 때 보여주는 안내 메세지. EditText와 다르게 문자열 입력시 상단부분으로 올라감
  • counterEnabled : 입력한 글자의 수가 나타남 (*우측사이드바에서 설정가능)
  • counterMaxLength : 지정한 글자수를 넘으면 붉은색으로 표시 (*우측사이드바에서 설정가능)
    binding.button.setOnClickListener { // 클릭리스너를 바로 구현
            binding.textView.text = binding.textInputLayout1.editText?.text
        }

        binding.textInputLayout1.editText?.addTextChangedListener(listner1) // 외부에서 구현한 리스너 달아주기

    }

    val listner1 = object : TextWatcher{ //
		
        // 문자열 변경 작업이 화면에 반영시
        override fun afterTextChanged(p0: Editable?) {
            if(p0 != null){
                if(p0.length > 10){
                    binding.textInputLayout1.error ="10글자 이하로 입력하시오."
                    //버튼 비활성화 필요
                }else{
                    binding.textInputLayout1.error = null
                }
            }
        }
		
        // 문자열 변경 작업이 완료시
        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }

	// 문자열 변경전
        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }
    }

}

 

💡 커서 없애고, 키보드 내리기

editText1.clearFocus() //포커스 사라짐


val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 

/*
 * getSystemService -> 안드로이드 os 에서 운영되고 있는 기능들을 가져다 쓰고 싶을 때 사용
 * 자신이 사용할 기능을 명시하고 형변환 해줌
*/

imm.hideSoftInputFromWindow(editText.windowToken,0)//키보드 내려감
반응형