반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 쿼터뷰
- 서브모듈 pull
- 티스토리
- DataBinding
- 코틀린
- 타이쿤
- gitlab submodule
- submodule pull
- GIT
- github submodule
- Android Studio
- 안드로이드
- github
- 앱개발
- 게임개발
- 안드로이드개발
- 내 맘대로 정리한 안드로이드
- 카페오냥
- 2d게임
- 앱
- Kotlin
- 안드로이이드 submodule
- Android
- 개발
- Unity
- java
- submodule sourcetree
- 유니티
- firebase
- 서브모듈 sourcetree
Archives
- Today
- Total
Uing? Uing!!
[안드로이드 팁] 데이터바인딩 내부에서 리소스 또는 String(plain text)를 사용하는 방법 본문
반응형
데이터바인딩(databinding)
데이터바인딩을 활용하면 레이아웃에서 변수를 정의하고 활용할 수 있다.
데이터바인딩에 대한 포스팅은 별도로 작성 예정이지만, 간단히 데이터바인딩을 활용하는 예시는 이렇다.
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable name="name" type="String" /> <!-- name 이라는 변수 정의 -->
</data>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@{name}"/> <!-- name 변수 활용 -->
</FrameLayout>
</layout>
class MainActivity: AppCompatActivity() {
private var _binding: ActivityFirstBinding? = null
private val binding: ActivityFirstBinding get() = _binding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = DataBindingUtil.setContentView(this, R.layout.activity_main, null)
binding.name = "Sally" // databinding에 정의된 name에 값 설정
}
}
데이터바인딩에서 변수와 함께 다른 값 사용
데이터바인딩 레이아웃에서 뷰 내부의 attribute에 "@{변수값}" 을 적용하면 해당 변수 값을 사용할 수 있다.
만일 변수값을 활용하지 않고 그냥 plain string만 사용하고 싶다면 @{}를 빼고 그냥 "Some String"과 같이 쓰면 된다.
하지만 데이터바인딩을 활용하다 보면, 변수값과 플레인 텍스트를 함께 사용하고 싶을 때가 있다.
이를테면 name이라는 변수가 null이 아니라면 name을, null이라면 'no name'이라는 값을 나타내고 싶은 경우가 있겠다.
이 경우 'no name'이라는 변수를 strings.xml에 리소스로 지정할 수도 있고, 아니면 레이아웃에서 직접 집어넣고자 할 수도 있다.
리소스 활용
만일 'no name'에 해당하는 값이 resources의 strings.xml에 지정되어 있는 값이라면 아래처럼 사용할 수 있다.
<TextView
android:id="@+id/edit_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:text="@{name != null ? name : @string/default_name}"
/>
String(Plain Text) 활용
스트링 값을 리소스에서 가져오지 않고 직접 레이아웃에 집어넣어야 하는 경우도 있다.
그러나 데이터바인딩의 "@{}" 내부에서는 텍스트를 "로 감쌀 수도 없고, '로 감쌀 수도 없다.
이럴 때에는 " 대신 `로 해당 스트링을 감싸면 된다.
<TextView
android:id="@+id/edit_text_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:text="@{name != null ? name : `no name`}"
/>
반응형
'Android' 카테고리의 다른 글
[안드로이드 팁] 안드로이드 스튜디오 탐색기에서 현재 편집 중인 파일 바로/항상 접근하기 (0) | 2021.11.08 |
---|---|
[안드로이드 팁] include 태그: 반복되는 레이아웃을 재사용하자! (4) | 2021.10.27 |
[안드로이드 삽질기록] The Hilt Android Gradle plugin is applied but no com.google.dagger:hilt-android-compiler dependency was found (2) | 2021.10.25 |
[안드로이드 팁] Annotate와 Git History: 안드로이드 스튜디오에서 깃 커밋 히스토리 확인하기 (0) | 2021.10.25 |
[안드로이드 삽질기록] TextWatcher의 함정: 키보드마다 동작이 다르다? (1) | 2021.10.23 |
Comments