Chcę pokazać androidowi, Snackbar
(android.support.design.widget.Snackbar)
kiedy zaczyna się aktywność, tak jak pokazujemy Toast
.
Problem polega jednak na tym, że podczas tworzenia w Snackbar
ten sposób musimy określić układ nadrzędny :
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();
Jak nadać układ nadrzędny, gdy pokazujemy Snackbar
na początku działania bez żadnych kliknięć (gdyby było to zdarzenie kliknięcia, moglibyśmy łatwo przekazać widok nadrzędny)?
android
material-design
android-snackbar
Sudheesh Mohan
źródło
źródło
Odpowiedzi:
Po prostu wskaż dowolną pozycję
View
wActivity's
kodzie XML. Możesz na przykład nadać identyfikator głównej grupie viewGroup i użyć:@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(); }
źródło
findViewById(android.R.id.content)
jak wskazano tutaj stackoverflow.com/a/4488149/1518546Do tej pory miałem problemy z wyświetlaniem Snackbar. Oto najprostszy sposób wyświetlenia Snackbara. Aby wyświetlić go jako początek głównego działania, po prostu umieść te dwie linie w swoim
OnCreate()
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Welcome To Main Activity", Snackbar.LENGTH_LONG); snackbar.show();
PS Po prostu upewnij się, że zaimportowałeś wsparcie projektowania Androida (jak wspomniano w pytaniu).
Dla Kotlina,
Snackbar.make(findViewById(android.R.id.content), message, Snackbar.LENGTH_SHORT).show()
źródło
Snackbar.make(findViewById(android.R.id.content), "Got the Result", Snackbar.LENGTH_LONG) .setAction("Submit", mOnClickListener) .setActionTextColor(Color.RED) .show();
źródło
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();
źródło
Funkcja przyborów do pokazowego baru z przekąskami
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() }
Przykład użycia w ćwiczeniu
showSnackBar(this, "No internet") showSnackBar(this, "No internet", duration = Snackbar.LENGTH_LONG) showSnackBar(activity, "No internet", "OK", View.OnClickListener { // handle click })
Przykład użycia we fragmencie
showSnackBar(getActivity(), "No internet")
Mam nadzieję, że to pomoże
źródło
Możesz wypróbować tę bibliotekę. To jest opakowanie dla domyślnego paska przekąskowego Androida. https://github.com/ChathuraHettiarachchi/CSnackBar
Snackbar.with(this,null) .type(Type.SUCCESS) .message("Profile updated successfully!") .duration(Duration.SHORT) .show();
Zawiera wiele rodzajów batonów, a nawet niestandardowy bar przekąskowy zintegrowany
źródło
Można to zrobić po prostu za pomocą poniższych kodów w onCreate. Korzystając z domyślnego układu Androida
Snackbar.make(findViewById(android.R.id.content),"Your Message",Snackbar.LENGTH_LONG).show();
źródło
getWindow().getDecorView()
przywróć WSZYSTKIE ekrany, dołącz „dolne przyciski” (np. strona główna, wstecz itp.). Więc moja przekąska wyświetlała się do tych przycisków, a nie w aplikacjiwindow
naandroid.R.id.content
wszystko zaczynam pracę. Napisałem więc swój komentarz, aby rozwiązać w przyszłościMożesz także zdefiniować superklasę dla wszystkich swoich działań i znaleźć widok w czynności rodzica.
na przykład
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); } }
a Twoje przekąski będą wyglądać tak w każdej aktywności w Twojej aplikacji:
Snackbar.make(content, "hello every body", Snackbar.LENGTH_SHORT).show();
Lepiej dla wydajności, gdy dla każdej czynności musisz znaleźć widok raz.
źródło