Snackbar를 모방 한 클래스를 직접 만들었습니다. CustomSnackbar를 호출 할 수 있습니다. 내가 성취하고자하는 것은 스낵바를 커스터마이징하고 CustomSnackbar를 내 주요 활동에서 호출 할 수 있고 표준 Snackbar를 호출하는 것과 매우 유사하게 사용하는 것입니다. 모든 벌크 코드없이 내 예를 시연의 목적을 위해, 여기 내 CustomSnackbar 클래스입니다 : 내 MainActivity에서내 클래스에서 onClickListener를 사용하는 방법
package com.wizzkidd.myapp.helpers;
import android.content.Context;
import android.support.design.widget.Snackbar;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class CustomSnackbar {
Context _context;
Snackbar snackbar;
public CustomSnackbar(Context context) {
this._context = context;
}
public void make(View view, CharSequence text, int duration) {
snackbar = Snackbar.make(view, "", duration);
Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbar.getView();
TextView textView = (TextView) snackbarLayout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE); //hide the default snackbar textview
//Create my own textview instead
TextView myTextView = new TextView(_context);
myTextView.setText(text);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); //Create layout params for some text
myTextView.setLayoutParams(params); //Apply the text layout params
snackbarLayout.addView(myTextView); //Add my text to the main snackbar layout. (Other widgets will also be added)
}
public void setAction(CharSequence text) {
snackbar.setAction(text, new View.OnClickListener() {
@Override
public void onClick(View view) {
//do something
Log.v("TAG", "You clicked the action");
}
});
}
public void show() {
snackbar.show();
}
}
,이 같은 클래스를 사용하고 있습니다 :
CustomSnackbar customSnackbar = new CustomSnackbar(activity);
customSnackbar.make(view, "This is my snackbar", Snackbar.LENGTH_INDEFINITE);
customSnackbar.setAction("HIDE");
customSnackbar.show();
을 당신이 I를 볼 수 있습니다 내 .setAction 메서드를 사용하여 문자열/charsequence를 전달하고 있지만 클래스 내에서 onClickListener를 처리하는 대신 onClickListener를 처리하는 방법이 확실하지 않습니다.
클래스가 무의미 할 수도 있다는 사실을 무시하십시오. 내가 이 질문의 목적을 위해 그것을 단순화했습니다.) 이 클래스를 올바르게 만들지 못하기 때문에 추가 조언이나 제안을 부탁드립니다. 감사.
고맙습니다. 귀하의 모범을 통해 내가 누락 된 부분과 해결 방법이 무엇인지 명확하게 알 수 있습니다. – WizzKidd
내 질문에 대한 확장 (올바른 방법으로 이것을 넣는 방법을 모르겠다.)에서 Snackbar 클래스의 다른 메소드를 모방하는 방법은 무엇입니까? CustomSnackbar 클래스에서 Snackbar 클래스를 확장해야합니까? 그렇다면 당신은 나에게 맞는 .make 메소드를 오버라이드 (override)해야 할 예제가있다. 말이 돼? – WizzKidd
현재 코드는 간단한 "Helper"처럼 보이므로 "Main code"에서 "Activity"와 같은 정적 메서드를 유지합니다. 그것은 당신이 골랐던 방법 일뿐입니다. 당신은 또한 원래의 SnackBar를 확장 할 수있다. 그런 다음 당신은 현재 "make"메소드의 코드를 생성자 나 다른 메소드에 넣어야한다. 그 안에는 SnackBar의 레이아웃이 이미 구현되어 있다는 것이 확실 할 것이다. 나는 당신이 생각한대로 (당신이 말했듯이, 당신은 약간의 코드를 잘라 냈습니다).제 의견으로는 "도우미"버전이 더 편리 할 수 있으며'return snackbar;와 함께 추가 getOriginalSnackBar() 메소드를 제공 할 수도 있습니다. – snachmsm