将 snackbar 放入 Utility class
Place snackbar in a Utility class
我经常使用这种方法来使用应用程序中使用的颜色显示快餐栏消息。出于这个原因,我想使该方法成为静态方法并将其放在实用程序的最终 class 中,这样我就可以在所有地方使用它而不必每次都重复它。
然而,这有一个问题,即 findViewById
和 getResources().getColor
等。需要一个 activity 到 "live in" 并且也不能是静态的。
有什么优雅的方法可以做到这一点?我一直在查看其他帖子,但其中 none 确实反映了这个问题。
谢谢!!
protected void displaySnackbar (String s)
{
Snackbar snack = Snackbar.make(findViewById(android.R.id.content), s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(getResources().getColor(R.color.primary_light));
snack.show();
}
您可以将 Context 和 View 作为参数传递
protected static void displaySnackbar (View view, Context context,String s) {
Snackbar snack = Snackbar.make(view.findViewById(android.R.id.content), s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(context.getResources().getColor(R.color.primary_light));
snack.show();
}
您可以将视图和上下文作为方法的参数传递
protected void displaySnackbar (Context context, View view, String s)
{
Snackbar snack = Snackbar.make(view, s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(context.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(context.getResources().getColor(R.color.primary_light));
snack.show();
}
您可以使用此代码gist
发布代码以防 link 出现故障
public class UtilSnackbar {
/************************************ ShowSnackbar with message, KeepItDisplayedOnScreen for few seconds*****************************/
public static void showSnakbarTypeOne(View rootView, String mMessage) {
Snackbar.make(rootView, mMessage, Snackbar.LENGTH_LONG)
.setAction("Action", null)
.show();
}
/************************************ ShowSnackbar with message, KeepItDisplayedOnScreen*****************************/
public static void showSnakbarTypeTwo(View rootView, String mMessage) {
Snackbar.make(rootView, mMessage, Snackbar.LENGTH_LONG)
.make(rootView, mMessage, Snackbar.LENGTH_INDEFINITE)
.setAction("Action", null)
.show();
}
/************************************ ShowSnackbar without message, KeepItDisplayedOnScreen, OnClickOfOk restrat the activity*****************************/
public static void showSnakbarTypeThree(View rootView, final Activity activity) {
Snackbar
.make(rootView, "NoInternetConnectivity", Snackbar.LENGTH_INDEFINITE)
.setAction("TryAgain", new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = activity.getIntent();
activity.finish();
activity.startActivity(intent);
}
})
.setActionTextColor(Color.CYAN)
.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
super.onDismissed(snackbar, event);
}
@Override
public void onShown(Snackbar snackbar) {
super.onShown(snackbar);
}
})
.show();
}
/************************************ ShowSnackbar with message, KeepItDisplayedOnScreen, OnClickOfOk restrat the activity*****************************/
public static void showSnakbarTypeFour(View rootView, final Activity activity, String mMessage) {
Snackbar
.make(rootView, mMessage, Snackbar.LENGTH_INDEFINITE)
.setAction("TryAgain", new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = activity.getIntent();
activity.finish();
activity.startActivity(intent);
}
})
.setActionTextColor(Color.CYAN)
.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
super.onDismissed(snackbar, event);
}
@Override
public void onShown(Snackbar snackbar) {
super.onShown(snackbar);
}
})
.show();
}
}
感谢大家的启发。此代码现在有效:
protected static void sacaSnackbar (Context context, View view, String s)
{
Snackbar snack = Snackbar.make(view, s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(contexto, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(ContextCompat.getColor(context, R.color.primary_light));
snack.show();
}
将此方法放在您想要显示快餐栏的位置,并在其中传递相应的参数 class
protected void displaySnackbar (View view,String s)
{
Snackbar snack = Snackbar.make(view, s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(getResources().getColor(R.color.primary_light));
snack.show();
}
我经常使用这种方法来使用应用程序中使用的颜色显示快餐栏消息。出于这个原因,我想使该方法成为静态方法并将其放在实用程序的最终 class 中,这样我就可以在所有地方使用它而不必每次都重复它。
然而,这有一个问题,即 findViewById
和 getResources().getColor
等。需要一个 activity 到 "live in" 并且也不能是静态的。
有什么优雅的方法可以做到这一点?我一直在查看其他帖子,但其中 none 确实反映了这个问题。 谢谢!!
protected void displaySnackbar (String s)
{
Snackbar snack = Snackbar.make(findViewById(android.R.id.content), s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(getResources().getColor(R.color.primary_light));
snack.show();
}
您可以将 Context 和 View 作为参数传递
protected static void displaySnackbar (View view, Context context,String s) {
Snackbar snack = Snackbar.make(view.findViewById(android.R.id.content), s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(context.getResources().getColor(R.color.primary_light));
snack.show();
}
您可以将视图和上下文作为方法的参数传递
protected void displaySnackbar (Context context, View view, String s)
{
Snackbar snack = Snackbar.make(view, s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(context.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(context.getResources().getColor(R.color.primary_light));
snack.show();
}
您可以使用此代码gist
发布代码以防 link 出现故障
public class UtilSnackbar {
/************************************ ShowSnackbar with message, KeepItDisplayedOnScreen for few seconds*****************************/
public static void showSnakbarTypeOne(View rootView, String mMessage) {
Snackbar.make(rootView, mMessage, Snackbar.LENGTH_LONG)
.setAction("Action", null)
.show();
}
/************************************ ShowSnackbar with message, KeepItDisplayedOnScreen*****************************/
public static void showSnakbarTypeTwo(View rootView, String mMessage) {
Snackbar.make(rootView, mMessage, Snackbar.LENGTH_LONG)
.make(rootView, mMessage, Snackbar.LENGTH_INDEFINITE)
.setAction("Action", null)
.show();
}
/************************************ ShowSnackbar without message, KeepItDisplayedOnScreen, OnClickOfOk restrat the activity*****************************/
public static void showSnakbarTypeThree(View rootView, final Activity activity) {
Snackbar
.make(rootView, "NoInternetConnectivity", Snackbar.LENGTH_INDEFINITE)
.setAction("TryAgain", new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = activity.getIntent();
activity.finish();
activity.startActivity(intent);
}
})
.setActionTextColor(Color.CYAN)
.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
super.onDismissed(snackbar, event);
}
@Override
public void onShown(Snackbar snackbar) {
super.onShown(snackbar);
}
})
.show();
}
/************************************ ShowSnackbar with message, KeepItDisplayedOnScreen, OnClickOfOk restrat the activity*****************************/
public static void showSnakbarTypeFour(View rootView, final Activity activity, String mMessage) {
Snackbar
.make(rootView, mMessage, Snackbar.LENGTH_INDEFINITE)
.setAction("TryAgain", new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = activity.getIntent();
activity.finish();
activity.startActivity(intent);
}
})
.setActionTextColor(Color.CYAN)
.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
super.onDismissed(snackbar, event);
}
@Override
public void onShown(Snackbar snackbar) {
super.onShown(snackbar);
}
})
.show();
}
}
感谢大家的启发。此代码现在有效:
protected static void sacaSnackbar (Context context, View view, String s)
{
Snackbar snack = Snackbar.make(view, s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(contexto, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(ContextCompat.getColor(context, R.color.primary_light));
snack.show();
}
将此方法放在您想要显示快餐栏的位置,并在其中传递相应的参数 class
protected void displaySnackbar (View view,String s)
{
Snackbar snack = Snackbar.make(view, s, Snackbar.LENGTH_LONG);
View sbview = snack.getView();
sbview.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
TextView textView = (TextView) sbview.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(getResources().getColor(R.color.primary_light));
snack.show();
}