부활절 달걀 기능 설치 (숨김 처리 기능)

9184 단어 Android

입문


"부활절 달걀이 뭐예요?"
처음 이 단어를 만났을 때 생각났다.
원래 이 단어와 만나는 건 업무적으로.
"기본적으로 아무것도 표시되지 않지만, 이 부분에 따라 단어를 표시하십시오."
통지가 계기가 됐습니다.
"간단해요."
그렇게 생각해요.
TextView를 준비하여 visibility 속성을 보십시오.INVISIBLE로 설정하고 클릭 이벤트 onClick 속성을 이 TextView와 연결하여 이 방법으로visibility 속성을 보십시오.VISIBLE으로 재설정합니다.
나는 이렇게 하면 될 줄 알았다.
참고로 View.INVISIBLE 및 View.나는 고네의 차이만 안다.그래서 이어서 총결해 봅시다.
Constant
Description
visible
화면에 나타나다.기본값.
invisible
화면에 표시되지 않지만 레이아웃에 고려됩니다.
gone
보기를 추가하지 않은 것처럼 완전히 숨깁니다.
출처: Android Developers
그렇군요. 역시 INVISIBLE이 좋습니다.
다음 코드로 실시해 보겠습니다.
(※ 코드는 알 수 있는 범위 내에서 크게 베어진다.)
<layout>
    ...
    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/easter_egg"
     ...
        android:text="イースターエッグ発動!!!"
        android:visibility="@{vm.isShown.booleanValue() ? View.VISIBLE : View.INVISIBLE}"
        android:onClick="@{() -> vm.tapped()}" />
</layout>

class MainViewModel {
    var isShown = MutableLiveData(false)
    ...
    fun tapped() {
        isShown.value = !isShown.value!!
    }
}
하지만!!!
"클릭하시면 됩니다!!!"
과연 INVISIBLE은 클릭 이벤트를 받을 수 없나요?
나는 [android invisible clickable] 등 검색어로 조사를 진행했다.
그래서 stack over flow에서'Easteregg'라는 단어를 만났다.알아봤어.

부활절 달걀이 뭐예요?


부활절 달걀(Easteregg)은 컴퓨터의 소프트웨어, 서적, CD 등에 숨겨져 본래의 기능, 목적과 무관한 정보와 화면을 총칭한다.
출처: Wikipedia
네.
이런 숨겨진 기능을 부활절 달걀이라고 하나요?
그래서 이런 경과에서 만났다.
그렇다면 문제는 아직 해결되지 않았다.
그리고 아까 키워드로 찾아보니 다양한 해결 방법이 있었어요.
같은 View에서 onClick 속성과visibility 속성을 설정한 경우visibility 속성이View됩니다.INVISIBLE로 설정하면 클릭 이벤트가 실행되지 않습니다.
그럼 어떡하지?
해결 방법
(1) 부모 층에서 onclick 속성을 설정하고 하위 층에서 가시성 속성을 설정합니다.
(2) 가시성 속성을 사용하지 않고 텍스트의 색상, 버튼의 배경 등을 투명하게 합니다.
이 두 가지 패턴은 해결할 수 있을 거야!!!
설치!

(1) 부모 층에서 onclick 속성을 설정하고 하위 층에서 가시성 속성을 설정합니다.

<layout>
    ...
    <androidx.constraintlayout.widget.ConstraintLayout
        ...
        android:onClick="@{() -> vm.tapped()}" >

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/easter_egg"
         ...
            android:text="イースターエッグ発動!!!"
            android:visibility="@{vm.isShown.booleanValue() ? View.VISIBLE : View.INVISIBLE}" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

class MainViewModel {
    var isShown = MutableLiveData(false)
    ...
    fun tapped() {
        isShown.value = !isShown.value!!
    }
}

(2) 가시성 속성을 사용하지 않고 텍스트의 색상, 버튼의 배경 등을 투명하게 합니다.

<layout>
    ...
    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/easter_egg"
     ...
        android:text="イースターエッグ発動!!!"
        android:textColor="@{vm.isShown.booleanValue() ? @android:color/black : @android:color/transparent}"
        android:onClick="@{() -> vm.tapped()}" />
</layout>

class MainViewModel {
    var isShown = MutableLiveData(false)
    ...
    fun tapped() {
        isShown.value = !isShown.value!!
    }
}

뜻밖의 기쁨.

끝내다


같은 View에서 onClick 속성과visibility 속성을 설정한 경우visibility 속성을View합니다.INVISIBLE로 설정하면 클릭 이벤트가 발동되지 않습니다!!!그러니까 노력이 필요해.

좋은 웹페이지 즐겨찾기