android - android:自定义小吃店在后台显示默认小吃店
问题描述
我有一个自定义布局的自定义小吃店。但它不能正确显示。它也在后台显示默认的小吃店:下面是我的代码:
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:如给出的答案中所述,;
在我的 CustomSnackbar 的 make 方法中:我给出了以下内容:
view.setBackgroundColor(parent.getContext().getResources().getColor(R.color.design_snackbar_background_color));
它如下所示:
我的 cardview 的行为现在丢失了:有什么办法可以恢复我的 cardview 的角半径以及要拉伸到最大的宽度!!??
解决方案
覆盖以下值
<color name="design_snackbar_background_color" tools:override="true">@color/transparent</color>
或者
Snackbar snackbar = Snackbar.make((ViewGroup) findViewById(android.R.id.content), "", Snackbar.LENGTH_LONG);
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
LayoutInflater mInflater = LayoutInflater.from(getApplicationContext());
View snackView = mInflater.inflate(R.layout.snackbar, null);
TextView textViewTop = (TextView) snackView.findViewById(R.id.textview_snackbar_text);
textViewTop.setText("ssdfds");
textViewTop.setTextColor(Color.WHITE);
layout.setPadding(0,0,0,0);
layout.addView(snackView, 0);
layout.setBackgroundColor(getResources().getColor(R.color.transparent));
snackbar.show();
在您的 styles.xml 中粘贴以下代码
<style name="MyRoundSnackbar" parent="@style/Widget.MaterialComponents.Snackbar">
<item name="android:layout_margin">32dp</item>
</style>
然后在你的主题中粘贴这一行
<item name="snackbarStyle">@style/MyRoundSnackbar</item>
还要将此行粘贴到您的xml中
<color name="transparent">#00FFFFFF</color>
推荐阅读
- javascript - 无法使用 await-async 函数访问变量
- javascript - Discord JS - 反向查找以从其显示名称中获取用户 ID
- neo4j - Neo4j中如何划分与两个不同节点相关的节点的依赖关系?
- python - 使用索引修剪数据框
- python - 如何避免通过 np.lib.stride_tricks.as_strided() 从 2d 数组创建 3d 数组但里面的元素不正确
- design-patterns - 在 Rust 中设计 USB 句柄的共享所有权
- php - 如何处理对 session_start() 的失败调用?
- .htaccess - 禁止 - 您无权访问此资源
- spring-boot - 如何使用嵌入式密钥斗篷进行完整导出(包括用户)
- python - 如何从字符串中提取日期并聚合它?