У меня есть пользовательский снэк-бар с пользовательским макетом. Но он не отображается должным образом. Он также показывает снэк-бар по умолчанию на заднем плане: ниже мой код:
import android.support.annotation.NonNull;
import android.support.design.widget.BaseTransientBottomBar;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.AppCompatTextView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class CustomSnackbar extends BaseTransientBottomBar<CustomSnackbar> {
protected CustomSnackbar(@NonNull ViewGroup parent,
@NonNull View content, @NonNull
android.support.design.snackbar.ContentViewCallback contentViewCallback) {
super(parent, content, contentViewCallback);
}
private static class ContentViewCallback
implements android.support.design.snackbar.ContentViewCallback {
// view inflated from custom layout
private View view;
public ContentViewCallback(View view) {
this.view = view;
}
@Override
public void animateContentIn(int delay, int duration) {
// TODO: handle enter animation
}
@Override
public void animateContentOut(int delay, int duration) {
// TODO: handle exit animation
}
}
public static CustomSnackbar make(ViewGroup parent, int duration,String text) {
// inflate custom layout
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.custom_snackbar, parent, false);
//Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout)view;
//layout.setPadding(0, 0, 0, 0);//set padding to 0
AppCompatTextView textView = (AppCompatTextView) view.findViewById(R.id.textview_snackbar_text);
textView.setText(text);
// create with custom view
ContentViewCallback callback= new ContentViewCallback(view);
CustomSnackbar customSnackbar = new CustomSnackbar(parent, view, callback);
customSnackbar.setDuration(duration);
return customSnackbar;
}
}
Ниже мой Пользовательский макет для моей пользовательской закусочной:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardCornerRadius="10dp"
android:padding="0dp"
android:background="@android:color/transparent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/button_green"
android:paddingTop="10dp"
android:paddingBottom="10dp"
>
<android.support.v7.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textview_snackbar_text"
android:textColor="@color/white"
android:text=""
android:textSize="@dimen/extra_small_text_size"
android:paddingTop="5dp"
android:paddingBottom="5dp"
/>
</LinearLayout>
</android.support.v7.widget.CardView>
Вот как я использую свою пользовательскую закусочную из BaseActivity: я использую ее в BaseActivity и android .R.id.content, чтобы я мог вызвать свою пользовательскую закусочную. от всех видов деятельности.
public void showSnackbar(String message) {
CustomSnackbar.make(findViewById(android.R.id.content),
CustomSnackbar.LENGTH_LONG,message).show();
}
Но когда я вызываю этот метод, вот как он показывает:
У меня есть Изучено много вопросов о стеке над потоком, таких как Пользовательский Snackbar не работает должным образом и Snackbar из пользовательского класса не показывает , но эти решения не работают для меня.
Любые идеи или идеи будут очень полезны.
Edit1 : Как уже упоминалось в ответе,;
Внутри метода make моего CustomSnackbar: я дал следующее:
view.setBackgroundColor(parent.getContext().getResources().getColor(R.color.design_snackbar_background_color));
И это выглядит так:
* 1 036 *
Теперь поведение моего просмотра карты потеряно: есть ли способ вернуть радиус угла моего просмотра и ширину, которую нужно растянуть до максимума !! ??