화면에 따라 status bar 색상을 변경하는 방법(Android JetPack/Navigation)
개시하다
화면에 따라 status bar 색상을 바꾸는 방법.
Android JetPack의 Navigation을 사용하는 경우 포커스를 기록합니다.
Navigation 사용
1.0.0-alpha05
.인상은 이렇다.
샘플에 사용된 원래 응용 프로그램은 Navigation의 codelab입니다.
https://github.com/googlecodelabs/android-navigation
대응 방법
순서대로 설명하면 대응 단계는 3개다.
1. 상태 표시줄의 색상 정의
내 생각에는 여러 가지 방법이 있는데, 정리하기 편리하도록, 여기에 엔움으로 상태란의 색을 정의했다.
StatusBarColor.kt
enum class StatusBarColor(private val key: String, val color: Int) {
BLUE("blue", android.R.color.holo_blue_dark),
RED("red", android.R.color.holo_red_dark),
BLACK("black", android.R.color.black);
companion object {
fun findByKey(key: String?): StatusBarColor =
StatusBarColor.values().find { it.key == key } ?: BLACK
}
}
findByKey
매개 변수는 빈 가시덤불이고 반환값이non-null이면 더욱 편리합니다.2. 각 Fragment에서 상태 표시줄의 색상을 정의합니다.
Navigation의 xml에서 각 Fragment의argument에 상태 표시줄의 색 정보를 제공합니다.코드의 상태 표시줄 색입니다.
mobile_navigation.xml
<navigation ...>
<fragment ...>
<argument
android:name="statusBarColor"
android:defaultValue="blue"
app:argType="string" />
...
</fragment>
<fragment ...>
<argument
android:name="statusBarColor"
android:defaultValue="red"
app:argType="string" />
...
</fragment>
...
</navigation>
android:name
: 코드에서argument에서 값을 추출하는 데 사용android:defaultValue
: 방금 정의한 StatusBarColor
의key
app:argType
: 문자열string
로 정의합니다.처음 "s"는 소문자입니다. 주의하십시오.3. NavController에서 청중 설정
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...(略)
findNavController(R.id.my_nav_host_fragment).addOnNavigatedListener { _, destination ->
// argumentからstatus barの色情報を取得する
val statusBarColor = StatusBarColor.findByKey(destination.defaultArguments.getString("statusBarColor"))
// status barの色を変更
window.statusBarColor = ContextCompat.getColor(this, statusBarColor.color)
}
}
설정NavController
OnNavigatedListener
.이렇게 하면 Navigation의 화면 마이그레이션이 완료되면 알림을 받을 수 있습니다.이때 매개 변수는 받아들일 수 있다NavDestination
.이NavDestination
는 화면 이동 후의 Fragment 정보를 가지고 있으며 여기에 위에서 정의한argument
도 포함한다.따라서 이
destination
에서 스트링 값을 꺼내 defaultArguments.getString
로 전환한다.이때string값이null이거나argument에 정의되지 않았음에도 불구하고
StatusBarColor
의 매개 변수는nulllable이고 반환값이nonnull이어도 편리하게 사용할 수 있습니다.그리고
StatusBarColor.findByKey
의colorResId를 사용하여 실제 상태막대의 색을 바꾸면 완성됩니다.관련 링크
Navigation 키를 사용하여 백엔드 키 조작하기
Reference
이 문제에 관하여(화면에 따라 status bar 색상을 변경하는 방법(Android JetPack/Navigation)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mkosuke/items/4900592aeb3cc68b2364텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)