활동이 시작될 때 스낵바를 표시하는 방법은 무엇입니까?


98

Snackbar (android.support.design.widget.Snackbar)활동이 시작될 때 Android를 표시하고 싶습니다 Toast.

하지만 문제는 다음 Snackbar과 같이 만들 때 부모 레이아웃을 지정해야한다는 것입니다.

Snackbar.make(parentlayout, "This is main activity", Snackbar.LENGTH_LONG)
            .setAction("CLOSE", new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }
            })
            .setActionTextColor(getResources().getColor(android.R.color.holo_red_light ))
            .show();

Snackbar클릭 이벤트없이 액티비티 시작 부분에 표시 할 때 부모 레이아웃을 제공하는 방법 (클릭 이벤트 인 경우 부모보기를 쉽게 전달할 수 있음)?


1
에 기사 글 onetouchcode.com/2016/12/24/use-snackbar-android-apps을 ,이 플로팅 작업의 자세한 내용을 알고 도움이 될 것입니다
쉐일 렌드 라

답변:


211

XML View내부를 가리 킵니다 Activity's. 예를 들어 루트 viewGroup에 ID를 제공하고 다음을 사용할 수 있습니다.

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);    
   setContentView(R.layout.main_activity);
   View parentLayout = findViewById(android.R.id.content);
   Snackbar.make(parentLayout, "This is main activity", Snackbar.LENGTH_LONG) 
        .setAction("CLOSE", new View.OnClickListener() {
            @Override 
            public void onClick(View view) {

            } 
        }) 
        .setActionTextColor(getResources().getColor(android.R.color.holo_red_light ))
        .show(); 
   //Other stuff in OnCreate();
}

57
루트보기의 경우 일반적으로 findViewById(android.R.id.content)여기에 표시된대로 사용할 수도 있습니다. stackoverflow.com/a/4488149/1518546
John Cummings

보기 parentLayout = findViewById (R.id.root_view); 5.0 이하 버전에서 nullpointer 예외가 발생합니다. 이 문제를 해결하는 방법?
아난드 Savjani

1
@AnandSavjani이 코드는 5.0 이하 5.0에서 완벽하게 작동합니다. 레이아웃 (root_view)에 오류가있을 것입니다. 조각을 사용하는 경우 rootview.findViewById (R.id.your_parent_view); 또한 레이아웃 이름과 동일한 ID를 제공하지 마십시오.
Sudheesh Mohan

CoordinatorLayout을 루트로 사용하지 않으면 NullpointerException이 발생한다고 생각합니다.
Ishaan

지원 설계 라이브러리를 포함하는 것을 잊지 마십시오 'com.android.support:design:27.0.0'
니콜라

27

지금까지 Snackbar를 표시하는 데 어려움을 겪었습니다. 다음은 스낵바를 표시하는 가장 간단한 방법입니다. 주요 활동 시작으로 표시하려면이 두 줄을OnCreate()

    Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Welcome To Main Activity", Snackbar.LENGTH_LONG);
    snackbar.show();

추신 : Android 디자인 지원을 가져 왔는지 확인하십시오 (질문에서 언급했듯이).

Kotlin의 경우

Snackbar.make(findViewById(android.R.id.content), message, Snackbar.LENGTH_SHORT).show()

8

이 시도

Snackbar.make(findViewById(android.R.id.content), "Got the Result", Snackbar.LENGTH_LONG)
                        .setAction("Submit", mOnClickListener)
                        .setActionTextColor(Color.RED)
                        .show();

3

onCreate에서이 메서드를 호출합니다.

Snackbar snack = Snackbar.make(
                    (((Activity) context).findViewById(android.R.id.content)),
                    message + "", Snackbar.LENGTH_SHORT);
snack.setDuration(Snackbar.LENGTH_INDEFINITE);//change Duration as you need
            //snack.setAction(actionButton, new View.OnClickListener());//add your own listener
            View view = snack.getView();
            TextView tv = (TextView) view
                    .findViewById(android.support.design.R.id.snackbar_text);
            tv.setTextColor(Color.WHITE);//change textColor

            TextView tvAction = (TextView) view
                    .findViewById(android.support.design.R.id.snackbar_action);
            tvAction.setTextSize(16);
            tvAction.setTextColor(Color.WHITE);

            snack.show();

2

쇼 스낵바를위한 유틸리티 기능

fun showSnackBar(activity: Activity, message: String, action: String? = null,
    actionListener: View.OnClickListener? = null, duration: Int = Snackbar.LENGTH_SHORT) {
    val snackBar = Snackbar.make(activity.findViewById(android.R.id.content), message, duration)
        .setBackgroundColor(Color.parseColor("#CC000000")) // todo update your color
        .setTextColor(Color.WHITE)
    if (action != null && actionListener!=null) {
        snackBar.setAction(action, actionListener)
    }
    snackBar.show()
}

활동에서 사용하는 예

  showSnackBar(this, "No internet")
  showSnackBar(this, "No internet", duration = Snackbar.LENGTH_LONG)
  showSnackBar(activity, "No internet", "OK", View.OnClickListener { 
       // handle click 
  })

조각에서 사용하는 예

  showSnackBar(getActivity(), "No internet")

도움이되기를 바랍니다.


1

이 라이브러리를 사용해 볼 수 있습니다. 이것은 안드로이드 기본 스낵바의 래퍼입니다. https://github.com/ChathuraHettiarachchi/CSnackBar

Snackbar.with(this,null)
    .type(Type.SUCCESS)
    .message("Profile updated successfully!")
    .duration(Duration.SHORT)
    .show();

여기에는 여러 유형의 스낵바와 심지어 customview 통합 스낵바가 포함됩니다.


1

onCreate 내에서 다음 코드를 사용하여 간단히 수행 할 수 있습니다. Android의 기본 레이아웃을 사용하여

Snackbar.make(findViewById(android.R.id.content),"Your Message",Snackbar.LENGTH_LONG).show();

안드로이드 버전 5.x-갑자기 getWindow().getDecorView()모든 화면을 반환하고 '하단 버튼'(예 : 홈, 뒤로 등)을 포함합니다. 내 간식이 아닌 응용 프로그램에서이 버튼을 아래로 보여주는 그래서
alena_fox_spb

업데이트 된 답변을 확인하십시오. 그것은 당신의 문제를 해결할 것입니다. 사용의 안드로이드 기본 레이아웃
Jarin 록스

네, 때 나는 변경 windowandroid.R.id.content모든 시작 작동합니다. 나는 미래에 함께 누군가 다른 문제를 해결하기 위해 내 의견을) 썼다 그래서
alena_fox_spb

0

모든 활동에 대해 수퍼 클래스를 정의하고 상위 활동에서 한 번보기를 찾을 수도 있습니다.

예를 들면

AppActivity.java :

public class AppActivity extends AppCompatActivity {

    protected View content;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        changeLanguage("fa");
        content = findViewById(android.R.id.content);
    }
}

간식은 앱의 모든 활동에서 다음과 같이 보입니다.

Snackbar.make(content, "hello every body", Snackbar.LENGTH_SHORT).show();

모든 활동에 대해 한 번보기를 찾아야하는 성능면에서 더 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.