SearchView
SearchView
는 API Level 11부터 제공하는 안드로이드 위젯 중 하나로 사용자가 쿼리를 날리고 그와 대응하는 결과를 리스트로 보여주는 컴포넌트입니다.
폰트를 변경하여 생성한 커스텀 TextView
, EditText
은 많이 존재합니다. 하지만 SearchView
에서는 TextView
, EditText
와는 다르게 문자열만 들어간 단일 컴포넌트가 아니라 다수개의 이미지, 텍스트 등이 합쳐진 복합적인 요소입니다. 따라서 SearchView
내부의 텍스트를 변경하기 위해 추가적인 처리과정이 필요합니다.
SearchView를 상속하여 커스터마이징
제가 폰트를 변경할 대상은 텍스트를 입력하는 컴포넌트 입니다. SearchView
를 상속하여 커스터마이징 하기 위해 안드로이드에서 만든 자체적인 SearchView
클래스를 열어봅시다.
여러개의 필드 중 우리가 찾고있는 컴포넌트는 mSearchSrcTextView입니다. SearchView
에서는 mSearchSrcTextView를 R.id.search_src_text 아이디를 사용하여 객체를 가져옵니다. 우리가 커스터마이징 진행할 클래스에서도 이와 동일하게 객체를 가져온 뒤 폰트를 변경하면 쉽게 해결할 수 있습니다.
mSearchSrcTextView의 폰트를 변경하기 위해 SearchAutoComplete
클래스를 열어보면 다음과 같이 구현되어있습니다.
SearchAutoComplete
는 TextView
와 관련된 클래스를 상속받아 구현되어있는 것을 알 수 있습니다. 따라서 SearchAutoComplete
클래스에서 폰트를 바로 변경할 수 있다는 것을 알 수 있습니다.
폰트를 변경하기 위한 커스터마이징 클래스틑 다음과 같습니다.
SearchView
에서 findViewById로 SearchAutoComplete
객체를 찾는 과정을 동일하게 진행한 뒤 해당 객체의 폰트를 변경시켜 줍니다.
여기서 폰트를 변경시켜주는 과정은 생성자에서 진행을 합니다.
public class NotoSansSearchView extends SearchView {
SearchAutoComplete searchAutoComplete;
public NotoSansSearchView(Context context) {
super(context);
initUI();
applyFont(context);
}
public NotoSansSearchView(Context context, AttributeSet attrs) {
super(context, attrs);
initUI();
applyFont(context);
}
public void initUI(){
searchAutoComplete = (SearchAutoComplete)this.findViewById(R.id.search_src_text);
searchAutoComplete.setHintTextColor(Color.BLACK);
searchAutoComplete.setTextColor(Color.BLACK);
searchAutoComplete.setAlpha(0.37f);
}
public void applyFont(Context context){
final String language = Locale.getDefault().getLanguage();
final String fontPath = language.equals("kr") ? "NotoSansKR-Regular-Hestia.otf" : "Roboto-Regular.ttf";
final Typeface typeface = Typeface.createFromAsset(context.getAssets(), fontPath);
searchAutoComplete.setTypeface(typeface);
}
}
상속받은 SearchView에서 SearchAutoComplete를 아이디 R.id.search_src_text 를 통해 찾았습니다. 그 이후 생성자에서 폰트를 변경시켜주는 과정을 진행하였습니다.
'Android' 카테고리의 다른 글
안드로이드 문자리소스 Google Spread Sheet로 관리하기 (Android string resource with Google spread sheet) (1) | 2019.07.19 |
---|---|
코틀린에서 레트로핏 사용하기 (Use retrofit2 with kotlin) (0) | 2019.07.19 |
Android 둥근모서리 이미지 뷰 만들기 (Android rounded corners image view) (0) | 2018.11.11 |
Android에서 GoogleFit 걸음수 데이터 조회하기 (2) | 2017.12.28 |