Android AppWidget에서 Snakbar 사용

11508 단어 AndroidSnackBar

개요


안드로이드의 AppWidget에 사용Snackbar 방법을 적으십시오.

What is "Snackbar"?


Toast와 비슷한 안드로이드의 팝업 기능화면 아래에서 짜내면 일정 시간이 지나면 화면 아래로 움츠러든다.

특징.

  • 색상 변경 가능
  • 사용자에게 추가 동작 제공
  • 아래에 나타나기 때문에 화면 그리기를 방해하지 않습니다
  • Toast와 같이 금방 사라지기 때문에 중요한 알림이 아니라 정도를 확인하는 데 사용
  • 이루어지다


    그럼, 우리 빨리 해 봅시다.

    의존성 추가


    app/build.gradle에 Design Support library 의존, sync를 추가하십시오.
    app/build.gradle
    dependencies {
        def supportLibVersion = '25.3.1'
        compile 'com.android.support:appcompat-v7:' + supportLibVersion
        compile 'com.android.support:support-v4:'   + supportLibVersion
        compile 'com.android.support:design:'       + supportLibVersion
    }
    

    메시지 보이기


    아주 간단하게 다음 코드로 표시할 수 있습니다.보기에 Context가 View인 것을 제외하고는 Toast와 기본적으로 똑같이 쓸 수 있다.
    메시지 보이기
    Snackbar.make(view, "Text", Snackbar.LENGTH_SHORT).show();
    

    색깔을 바꾸다


    Snakbar는 색상을 변경할 수 있습니다.이 때, 대상을 저장하고 getView () 방법으로 View를 가져오고, setBackgroundColor 임의의 색을 설정합니다.물론 투과도 가능하죠.
    색상 수정
    final Snackbar snackbar = Snackbar.make(view, "Text", Snackbar.LENGTH_SHORT);
    snackbar.getView().setBackgroundColor(color);
    

    Action


    Snakbar는 사용자에게 추가 동작을 알릴 수 있다.setAction을 통해 탭의 Text와 눌렸을 때 동작을 정의한 Listener를 건네줍니다.
    추가 작업 구성
    snackbar.setAction("Next!", new View.OnClickListener() {
                @Override
                public void onClick(final View v) {
                    Toast.makeText(v.getContext(), "Why?", Toast.LENGTH_SHORT).show();
                }
    });
    

    주의

  • AppCompoatActivity가 아니면 사용할 수 없음...유류 앱에서 TabActivity를 계승한 경우 포기해야 함
  • View 필요...View가 없는 곳, 특히 AppWidget에서는 사용할 수 없음
  • AppWidget에서 Snakbar 사용


    위에서 설명한 대로 View를 직접 조작할 수 없는 AppWidget에서는 Snakbar를 사용할 수 없습니다.앱위젯을 주체로 하는 앱이라 모처럼의 기능을 못 쓰게 돼 아쉬우니 어떻게든 해결해보려고 한다.
    비록 정면 공격은 아니지만 가상의 투명한 Activity를 표시하고 Visew를 사용하여 Snakbar를 표시하는 방법을 고려했다.

    샘플 코드


    에 업로드되었습니다.

    샘플 GIF


    GiitHub 웨어하우스
    AppWidget의 각 색상을 클릭하면 해당 색상의 Snakbar가 표시되며 "Next 오류 33;"why라는 토스트를 남겼다.신구 공연.

    이루어지다



    요점은 다음과 같은 네 가지다.
  • 계승 AppCompoatActivity
  • 투명 테마 사용
  • onCreate 방법overridePendingTransition(0, 0);에서 Activity를 시작할 때의 Transition을 무효화
  • StartusBar의 투명화(API 레벨 21 이후)
  • 자동finish의 Executor 작업 등록
  • finish 방법overridePendingTransition(0, 0);에서Activity가 끝날 때의 Transition을 무효화
  • 이하 상술.

    1. AppCompoatActivity 계승


    AppCompoatActivity가 아니면 Snakbar를 사용할 수 없습니다. 그렇게 하십시오.

    2. 투명 테마 사용


    다음 투명 테마 정의
    app/src/main/res/values/styles.xml
    <resources>
    
        <!-- ...... -->
    
        <style name="DummyTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:activityOpenExitAnimation">@null</item>
            <item name="android:colorBackgroundCacheHint">@null</item>
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
            <item name="android:windowAnimationStyle">@android:style/Animation</item>
            <item name="android:windowIsTranslucent">true</item>
        </style>
    
    </resources>
    
    AndroidManifest.xml로 설정하십시오.
    app/src/main/AndroidManifest.xml
            <activity
                android:name=".DummyActivity"
                android:label="@string/app_name"
                android:theme="@style/DummyTheme"
                >
    

    4. StaturBar의 투명화(API 레벨 21 이후)


    Window 클래스의 setStation BarColor에서는 위 열을 투명하게 설정하고, 아래 열을 Snakbar와 같은 색으로 설정합니다.
    투명화
        private void setStatusBarTransparent() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = getWindow();
                window.setStatusBarColor(Color.TRANSPARENT);
                window.setNavigationBarColor(mColor);
            }
        }
    

    5. 자동finish의 Executor 작업 등록


    이러다 투명한 액티비티가 남아서 거추장스러우니 비동기 작업에서 덤미액티비티finish()를이번에는 Executors.new Single Theread Executor로 간단하게 이렇게 해 보았습니다.
    자동finish_하다Executor_작업 등록
        private void executeFinisher() {
            final ExecutorService executorService = Executors.newSingleThreadExecutor();
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(2000L);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    finish();
                }
            });
            executorService.shutdown();
        }
    

    상관없는 일


    스낙바는 패스트푸드점과 모바일 아이스크림 가게를 뜻한다고 한다.스니커스가 아닌 것 같은데.

    끝맺다


    AppWidget에서 Snaker를 사용하는 방법에 대해 설명했습니다.올바른 방법이 아니고 앞으로 OS 제한으로 못 쓸 수도 있으니 좋은 아이를 흉내내지 마세요.
  • Snakbar의 디자인이 더욱 좋고 사용자 친화적인 팝업
  • 가상 Activity가 준비된 경우 AppWidget에서도 Snakbar
  • 사용 가능

    링크

  • DummyActivity
  • 좋은 웹페이지 즐겨찾기