Android this and that
14 Jun 2019 | tipDrawable 가져오기
getString을 제외하고는 Context 에서 ContextCompat으로 바뀌었다.
ContextCompat.getDrawable(context, R.drawable.blabla)
Color 가져오기
ContextCompat.getColor(context, R.color.colorBlabla)
하나의 문자열 마음대로 꾸미기
SpannableString 문자열 하나를 두고서 앞, 중간, 뒤에 이미지를 넣거나 특정 서브 스트링에 스타일링을 할 수 있다.
DataBinding + String resource + Html
resource + html
<string name="my_text"><![CDATA[<font color=#FF7815>안녕하세요.</font>]]>안드로이드 개발자입니다.</string>
layout xml + databinding
<data>
<import type="androidx.core.text.HtmlCompat" />
</data>
....
<TextView
...
android:text="@{HtmlCompat.fromHtml(@string/receive_this_month_info1, HtmlCompat.FROM_HTML_MODE_COMPACT)}"
...
/>
</TextView>
Recycler view
패딩값 설정
android:clipToPadding
- android:clipToPadding 속성 리사이클러뷰의 크기를 줄이지 않고, 랜더링되기 전에 시작과 끝에 패딩값을 넣어 줄 수 있다.
layoutManager xml에서 관리
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem
tools:listitem="@layout/list_item_garden_planting"
listview
나 recycler
뷰에서 tools:listitem
속성이 실제 프로덕션에서 영향을 미치진 않는다. 다만 해당 리사이클러뷰의 각 item list의 뷰(레이아웃)을 바로 찾아갈 수 있고, 개발 도중 일종의 미리보기처럼 볼 수 있다.
Drwable Layout
android:fitsSystemWindows = true
옆에서 슬며시 나오는 뷰가 status bar와 키보드 영역을 덮지 않음을 설정하는 부분. true라면 status바를 덮지 않는다.
Databinding
finish Activity
...
<import type="android.app.Activity"/>
...
<ImagaeView
android:onClick="@{(view) -> ((Activity)(view.getContext())).finish()}" />
...
@string databinding
@string 파일에 아래와 같이 작성
<string name="planted_date" translation_description="식물 심은 날짜 표기">%1$s planted on %2$s</string>
%1$s
와 %2$s
는 각각 첫 번째 스트링으로 대체될 부분, 두 번째 스트링으로 대체될 부분을 뜻한다. 이들을 xml에서 databinding으로 적용하는 코드는 아래와 같다.
<TextView
android:id="@+id/plant_date"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@{@string/planted_date(viewModel.plantName, viewModel.plantDateString)}" />
Tools
tools:layout
<fragment
...
tools:layout="@layout/fragment_view"
...
>
디자인 탭에서 액티비티 xml 내에 fragment는 보통 회색으로 보여진다. 그러나 tools:layout
을 사용하면 Fragment의 내용도 함께 보여진다.
Material
툴바 좌측에 홈 or 상위 화면으로 이동하는 버튼 노출시키기
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
supportActionBar?.setDisplayHomeAsUpEnabled(true) // <- 이 부분
...
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
android.R.id.home -> onBackPressed()
}
return super.onOptionsItemSelected(item)
}}
style
statusBar color와 statusBar icon들의 색상 변경
<style name="DarkStatusDialog" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:statusBarColor">@color/colorStatusBarBackground</item>
<item name="android:windowLightStatusBar">false</item>
</style>
statusBarColor
로 status bar의 배경색을 지정하고, windowLightStatusBar
로 밝음 색임을 알려주면 icon 색상이 어둡게 나타난다.
적용할 view Class에서 아래와 같이 적용해줌.
init {
setStyle(STYLE_NO_TITLE, R.style.DarkStatusDialog)
}
ScrollView
SrollView 내부의 중간 내용물이 적어도, 특정 뷰를 레이아웃 하단에 고정시키고 싶은 경우 키워드 -> fillViewport=true
ImageView
이미지의 가로세로 비율에 따라 크기를 조절해주는 키워드 -> android:adjustViewBounds = true
Glide4
Glide4 에서 이미지 Border 간단하게 처리하기
GlideApp.with(context).load("imageUrl")
.transform(RoundedCorners(50))
.into(imageView)
리사이클러뷰와 동적 높이를 가진 이미지 랜더링
아래와 같이 설정하면 채팅과 같이 동적인 비율의 이미지가 많이 랜더링 되는 화면에서 버벅임 없이 비율에 맞게 이미지가 표시된다. (이미지 가로를 고정하고, 높이를 wrap_content로 주었을 땐 심하게 버벅임이 일어난다.)
GlideApp.with(context)
.load("imageUrl")
.override(500, 500)
.into(imageView)
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:background="@color/transparent"
android:maxWidth="200dp"
android:maxHeight="400dp"
/>
Comments