如何在 Android 的 snackbar 中制作渐变?
How to make gradient in snackbar for Android?
我知道我可以使用 sbView.setBackgroundColor(Color.XX);
设置小吃店的背景,但是,如果我们需要为颜色添加渐变而不是单色背景。我应该怎么办?似乎没有 API 。
Snackbar 不允许您设置自定义布局。但是,正如 Primoz990 所建议的那样,您可以获得 Snackbar 的视图。 getView 函数returns Snackbar.SnackbarLayout,它是一个水平的LinearLayout 对象,它的子对象是一个TextView 和一个Button。要将您自己的视图添加到 Snackbar,您只需隐藏 TextView,并将您的视图添加到 Snackbar.SnackbarLayout.
// Create the Snackbar Snackbar
snackbar = Snackbar.make(containerLayout, "", Snackbar.LENGTH_LONG);
// Get the Snackbar's layout view
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
// Hide the text
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
// Inflate our custom view
View snackView = mInflater.inflate(R.layout.my_snackbar, null);
// Configure the view
ImageView imageView = (ImageView)
snackView.findViewById(R.id.image);
imageView.setImageBitmap(image);
TextView textViewTop = (TextView)
snackView.findViewById(R.id.text);
textViewTop.setText(text);
textViewTop.setTextColor(Color.WHITE);
// Add the view to the Snackbar's layout
layout.addView(snackView, 0);
// Show the Snackbar
snackbar.show();
通过这种方式,您可以为 snackbar 设置自定义布局。
现在可以这样设置渐变了:
创建一个my_gradient.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="0"
android:startColor="#f6ee19"
android:endColor="#115ede" />
</shape>
现在将自定义布局应用于您:
android:background="@drawable/my_gradient"
您可能需要在 drawable
文件夹中将背景定义为 shape
并根据需要为其提供适当的渐变让我们假设:
我们称它为 snackbar_background.xml
然后:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#000000"
android:centerColor="#5b5b5b"
android:endColor="#000000"
android:angle="0" />
</shape>
您可以探索如何制作 shape in android 并向其添加渐变。
那么你的 snackbar
:
View snackView=snackbar.getView();
snackView.setBackgroundResource(R.drawable.snackbar_background);
从那里开始就可以正常工作了。
我知道我可以使用 sbView.setBackgroundColor(Color.XX);
设置小吃店的背景,但是,如果我们需要为颜色添加渐变而不是单色背景。我应该怎么办?似乎没有 API 。
Snackbar 不允许您设置自定义布局。但是,正如 Primoz990 所建议的那样,您可以获得 Snackbar 的视图。 getView 函数returns Snackbar.SnackbarLayout,它是一个水平的LinearLayout 对象,它的子对象是一个TextView 和一个Button。要将您自己的视图添加到 Snackbar,您只需隐藏 TextView,并将您的视图添加到 Snackbar.SnackbarLayout.
// Create the Snackbar Snackbar
snackbar = Snackbar.make(containerLayout, "", Snackbar.LENGTH_LONG);
// Get the Snackbar's layout view
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
// Hide the text
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
// Inflate our custom view
View snackView = mInflater.inflate(R.layout.my_snackbar, null);
// Configure the view
ImageView imageView = (ImageView)
snackView.findViewById(R.id.image);
imageView.setImageBitmap(image);
TextView textViewTop = (TextView)
snackView.findViewById(R.id.text);
textViewTop.setText(text);
textViewTop.setTextColor(Color.WHITE);
// Add the view to the Snackbar's layout
layout.addView(snackView, 0);
// Show the Snackbar
snackbar.show();
通过这种方式,您可以为 snackbar 设置自定义布局。
现在可以这样设置渐变了:
创建一个my_gradient.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="0"
android:startColor="#f6ee19"
android:endColor="#115ede" />
</shape>
现在将自定义布局应用于您:
android:background="@drawable/my_gradient"
您可能需要在 drawable
文件夹中将背景定义为 shape
并根据需要为其提供适当的渐变让我们假设:
我们称它为 snackbar_background.xml
然后:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#000000"
android:centerColor="#5b5b5b"
android:endColor="#000000"
android:angle="0" />
</shape>
您可以探索如何制作 shape in android 并向其添加渐变。
那么你的 snackbar
:
View snackView=snackbar.getView();
snackView.setBackgroundResource(R.drawable.snackbar_background);
从那里开始就可以正常工作了。