android snackbar使用的Action是怎样全部转成大写的呢

android开发之SnackBar的使用
SnackBar是一个类似于Toast的东西,它也有显示时长,但是比Toast更加灵活,同时,我们还可以给SnackBar设置点击事件,那么我们今天就来看看怎么用吧!先来一张效果图:这种效果大家可能在一些App中已经见过,在没有SnackBar的时候,我们可能需要自定义View来实现这种效果,现在我们只需要简单几行代码就可以实现这种效果了,下来我们看看怎么实现这样的效果。1.点击后弹出不带action的snackbarsnackbar = Snackbar.make(view, "Snack Bar Text", Snackbar.LENGTH_INDEFINITE);
snackbar.show();view是我们点击的那个View,下来的文本就是弹出框显示的文本,最后一个参数表示Snackbar的显示时长,有多种取值,如下:
* Show the Snackbar indefinitely. This means that the Snackbar will be displayed from the time
* that is {@link #show() shown} until either it is dismissed, or another Snackbar is shown.
* @see #setDuration
public static final int LENGTH_INDEFINITE = -2;
* Show the Snackbar for a short period of time.
* @see #setDuration
public static final int LENGTH_SHORT = -1;
* Show the Snackbar for a long period of time.
* @see #setDuration
public static final int LENGTH_LONG = 0;这里三种值,分别是长期展示,这种情况下要我们调用dismiss方法来关闭snackbar,或者有其他snackbar显示的时候,它也会自动关闭,第二种和第三种意义和Toast差不多,不赘述。关闭一个Snackbar,我们只需要调用dismiss方法即可:snackbar.dismiss();2.带Action的SnackBar
Snackbar.make(view, "Snack Bar Text", Snackbar.LENGTH_LONG)
.setAction("Go!", new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
.setActionTextColor(Color.BLUE).show();也可以给SnackBar设置点击事件,如上,代码很简单,不多说。Demohttp://download.csdn.net/detail/u51795
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'1620人阅读
Android 5.x Material Design 使用(14)
这两个控件也是Google在2015 I/O大会上发布的Design Library包下的控件,使用比较简单,就放在一起讲了,但有的地方也是需要特别注意一下。
TextInputLayout
TextInputLayout功能非常简单,就是用于用户在EditText中输入时hint的提示和错误的提示。
先来看看效果图吧:
从上图很明显的看出:
1、当EditText获得焦点时候,TextInputLayout会在左上角默认的生成一个Label用来显示EditText中hint的内容,所以当用户输入时候hint内容会浮动到左上角,这极大便利了用户输入提交数据的体验。
2、当EditText中输入的内容不合法时,TextInputLayout便会在EditText的左下角用红色显示错误的提示信息。这是怎么回事呢?我们来看看TextInputLayout的源码,发现TextInputLayout中有个setErrorEnabled(boolean enabled)方法,意思就是是否设置错误提示信息:
从源码中我们很清晰的看到TextInputLayout的错误提示的工作原理了。总结就是:如果传入true,则TextInputLayout会在左下角生成一个TextView用来显示错误信息,如果传入false,则移除TextView从而不显示错误信息。从源码中我们还可以看到setError(CharSequence error);这个方法,顾名思义,这个方法就是当我们设置需要显示错误提示信息setErrorEnabled(true),我们再使用setError()方法把我们需要设置的错误提示信息传入到TextView中显示出来。
下面来看看怎么用代码实现:
布局activity_main.xml:
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&&
&android.support.design.widget.TextInputLayout
android:id=&@+id/textInput_layout_name&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:hint=&user_name& /&
&/android.support.design.widget.TextInputLayout&
&android.support.design.widget.TextInputLayout
android:id=&@+id/textInput_layout_password&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_marginTop=&20dp&
android:hint=&user_password& /&
&/android.support.design.widget.TextInputLayout&
&/LinearLayout&在代码中实现:
TextInputLayout mTextInputLayoutName = (TextInputLayout) findViewById(R.id.textInput_layout_name);
TextInputLayout mTextInputLayoutPassword = (TextInputLayout) findViewById(R.id.textInput_layout_password);
//mTextInputLayoutName.getEditText()返回的是它的子EditText控件,一个TextInputLayout只能包含一个EditText控件
mTextInputLayoutName.getEditText().addTextChangedListener(new MyTextWatcher(mTextInputLayoutName, &用户名长度不能小于6位&));
mTextInputLayoutPassword.getEditText().addTextChangedListener(new MyTextWatcher(mTextInputLayoutPassword, &密码长度不能小于6位&));MyTextWatcher代码:
class MyTextWatcher implements TextWatcher {
private TextInputLayout mTextInputL
private String errorI
public MyTextWatcher(TextInputLayout textInputLayout, String errorInfo) {
this.mTextInputLayout = textInputL
this.errorInfo = errorI
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
public void onTextChanged(CharSequence s, int start, int before, int count) {
public void afterTextChanged(Editable s) {
if (mTextInputLayout.getEditText().getText().toString().length() & 6) {
mTextInputLayout.setErrorEnabled(true);//是否设置错误提示信息
mTextInputLayout.setError(errorInfo);//设置错误提示信息
mTextInputLayout.setErrorEnabled(false);//不设置错误提示信息
其中,需要注意两点:
1、TextInputLayout布局中只能包含一个EditText子View,不能包含多个EditText。
2、TextInputLayout中有个方法getEditText();该方法返回的是它的子EditText对象,所以我们可通过mTextInputLayout.getEditText();来得到EditText对象,不需要findViewById找了。
3、设置错误提示信息时一定要先setErrorEnabled(true);再设置setError(...);因为TextView只在setErrorEnabled()方法中创建,必须创建好TextView才能往TextView上设置信息。而不需要设置时直接setErrorEnabled(false);即可,因为它自身会remove移除TextView。
Snackbar是带有动画效果的提示条,它极具美观效果,它出现在屏幕的底部,它和Toast类似,不过却有的地方和Toast不同,Snackbar可以添加按钮,可以支持滑动删除,也可以不作任何操作自身会在几秒(1.5s或2.75s)后消失。最值得注意的一点就是Snackbar不能同时显示多个,只能一次显示一个,而Toast可以同时显示多个这和Toast不同。
现在来看看怎么实现吧:
1、普通Snackbar:
代码实现:
Snackbar.make(rootView, &This is a SnackBar&, Snackbar.LENGTH_SHORT).show();//第一个参数是SnackBar显示在哪个视图上,必须设置,不能为null,一个界面也不能同时显示两个SnackBar其中特别需要注意第一个参数,它表示Snackbar是显示在哪个视图上,不可为null,比如我们可以通过页面中其它的view.getRootView()得到根视图,再把rooView设置进去即可。
2、带有按钮的Snackbar:
代码实现:
//带按钮的SnackBar
Snackbar.make(rootView,&带按钮的SnackBar&,Snackbar.LENGTH_SHORT).setAction(&UNDO&, new View.OnClickListener() {
public void onClick(View v) {
//do something ...
}).show();
好了,这两个控件就讲完了。。。
其中别忘记添加对design Library的依赖哦!
由于比较简单,就不上传源码了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:220601次
积分:3898
积分:3898
排名:第5472名
原创:131篇
转载:10篇
评论:265条
文章:16篇
阅读:66087
文章:15篇
阅读:64164
阅读:5868
文章:15篇
阅读:42679【Android-MaterialDesign】(12)
Snackbar 是 Android design support library 中的另一个组件。使用 Snackbar,可以在屏幕底部快速的显示一条消息,大体与 Toast 相同,但多了几分灵活性:
一小段时间之后、或者用户与屏幕触发交互,Snackbar 会自动消失;
可以包含一个可选的操作;
把 Snackbar 划出屏幕,可以弃用;
作为一条上下文敏感的消息,也是 UI 的一部分,并在屏幕内所有元素的上层显示,而不是像 Toast 消息一样位于屏幕中央;
一个时刻只能有唯一一个 Snackbar 显示。
Snackbar使用的时候需要一个控件容器用来容纳Snackbar.官方推荐使用CoordinatorLayout这个另一个Android Support Design Library库支持的控件容纳。因为使用这个控件,可以保证Snackbar可以让用户通过向右滑动退出。 Activity中获取CoordinateorLayout作为容器,然后调用Snackbar.make(container, “SnackbarTest”, Snackbar.LENGTH_LONG).show();就可以生成一个Snackbar了
Snackbar.make(view, message, duration)
.setAction(action message, click listener)
setAction()
make() 方法的第一个参数是一个 view,snackbar 会找到一个父 view,以寄存所赋的 snackbar 值。Snackbar 会沿着 view 的树状路径,找到第一个合适的布局或窗口视图,作为父 view。
上文提到,持续时间属性与 Toast 的相同,可选 LENG_SHORT 或者 LENGTH_LONG。
设置Action行为事件,使用的方法是public Snackbar setAction (CharSequence text, View.OnClickListener listener); Action的字体颜色默认使用系统主题中的如&item name="colorAccent"&#ff0000&/item&
可以通过代码去改变Action的字体颜色:Snackbar setActionTextColor (int color);
Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
public void onClick(View v) {
此处 rootlayout 是一个带有 FAB 的RelativeLayout
布局如下:
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
xmlns:app="/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"&
&android.support.design.widget.CoordinatorLayout
android:id="@+id/layoutRoot"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&android.support.design.widget.FloatingActionButton
android:id="@+id/btnFloatingAction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:src="@mipmap/ic_add_white"
app:fabSize="normal"
app:borderWidth="0dp"
android:layout_marginBottom="@dimen/fab_margin_bottom"
android:layout_marginRight="@dimen/fab_margin_right"/&
&/android.support.design.widget.CoordinatorLayout&
&/RelativeLayout&
点击 FAB 以查看结果:
可以正常运行,但是并不符合标准的 UX,应该按照下图所示,FAB 适当上移:
同时按照文档中描述:
在项目的 view 中添加 CoordinatorLayout,可以支持 snackbar 的更多特性,比如滑动消失,和 FAB 的自动移动。Having a CoordinatorLayout in your view hierarchy allows Snackbar to enable certain features, such as swipe-to-dismiss and automatically moving of widgets like FloatingActionButton.
配置 Snackbar:
可以使用 setActionTextColor 和 setDuration 等选项,配置 snackbar:
Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
public void onClick(View v) {
// Perform anything for the action selected
.setActionTextColor(R.color.material_blue)
.setDuration(4000).show()
activity_snackbar.xml
&RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
xmlns:app="/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"&
&android.support.design.widget.CoordinatorLayout
android:id="@+id/layoutRoot"
android:layout_width="match_parent"
android:layout_height="match_parent"&
&android.support.design.widget.FloatingActionButton
android:id="@+id/btnFloatingAction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:src="@mipmap/ic_add_white"
app:fabSize="normal"
app:borderWidth="0dp"
android:layout_marginBottom="@dimen/fab_margin_bottom"
android:layout_marginRight="@dimen/fab_margin_right"/&
&/android.support.design.widget.CoordinatorLayout&
&/RelativeLayout&
SnackbarAct
package .materialdesignwidget.
import android.os.B
import android.support.design.widget.CoordinatorL
import android.support.design.widget.FloatingActionB
import android.support.design.widget.S
import android.support.v7.app.AppCompatA
import android.view.V
import .materialdesignwidget.R;
public class SnackbarAct extends AppCompatActivity {
private FloatingActionButton floatingActionB
private CoordinatorLayout coordinatorL
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_snackbar);
setupUI();
public void setupUI() {
coordinatorLayout = (CoordinatorLayout) findViewById(R.id.layoutRoot);
floatingActionButton = (FloatingActionButton) findViewById(R.id.btnFloatingAction);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Snackbar.make(coordinatorLayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
public void onClick(View v) {
/** if(Build.VERSION.SDK_INT &= Build.VERSION_CODES.LOLLIPOP) {
RotateAnimation rotateAnimation = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(500);
rotateAnimation.setFillAfter(true);
rotateAnimation.setInterpolator(new FastOutSlowInInterpolator());
floatingActionButton.startAnimation(rotateAnimation);
floatingActionButton.clearAnimation();
ViewPropertyAnimatorCompat animatorCompat = ViewCompat.animate(floatingActionButton);
animatorCompat.setDuration(500);
animatorCompat.setInterpolator(new FastOutSlowInInterpolator());
animatorCompat.rotation(180);
animatorCompat.start();
英文原文:
Snackbar样式
在这里我们将看到如何显示不同颜色的snackbar,向用户传递更多暗示信息,比如snackbar背景显示成红色表明这是一个警告提示。
如何为Snackbar添加背景颜色
你可以通过getView() 方法获取Snackbar的核心视图,然后就可以在对它采用任意颜色了。
snackbar.getView().setBackgroundColor(colorId)
下面是ColoredSnackbar类,它封装了一些方法,可以根据用户指定的类型显示不同背景颜色。
public class ColoredSnackbar {
private static final int red = 0xfff44336;
private static final int green = 0xff4caf50;
private static final int blue = 0xff2195f3;
private static final int orange = 0xffffc107;
private static View getSnackBarLayout(Snackbar snackbar) {
if (snackbar != null) {
return snackbar.getView();
return null;
private static Snackbar colorSnackBar(Snackbar snackbar, int colorId) {
View snackBarView = getSnackBarLayout(snackbar);
if (snackBarView != null) {
snackBarView.setBackgroundColor(colorId);
public static Snackbar info(Snackbar snackbar) {
return colorSnackBar(snackbar, blue);
public static Snackbar warning(Snackbar snackbar) {
return colorSnackBar(snackbar, orange);
public static Snackbar alert(Snackbar snackbar) {
return colorSnackBar(snackbar, red);
public static Snackbar confirm(Snackbar snackbar) {
return colorSnackBar(snackbar, green);
Snackbar snackbar = Snackbar.make(getView(), R.string.hello_snackbar, Snackbar.LENGTH_SHORT)
ColoredSnackBar.alert(snackbar).show()
这里,我使用的是fragment的getView()方法来获得view,不过你也可以使用FrameLayout或者CoordinatorLayout。
英文原文:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:53568次
积分:2600
积分:2600
排名:第9672名
原创:126篇
评论:12条
阅读:2432
文章:24篇
阅读:8161
文章:11篇
阅读:11295
(3)(8)(21)(33)(13)(14)(29)(8)2588人阅读
android开发(21)
原创文章,转载请注明
这篇文章介绍下Android Design Support Library中的Snackbar的使用,如果你还不知道怎么使用这个Design Library请参考 ,Snackbar是一个类似Toast的控件,跟Toast一样可以设置时长,显示文字,但是它比Toast更加灵活,可以响应用户的触摸反馈,配合CoordinatorLayout使用,SnackBar还可以被Swipe手势划走。
1:普通的Snackbar
Snackbar.make(v, "NormalSnackbarShow",Snackbar.LENGTH_SHORT).show()
第一个参数是父容器View(可以是你的点击控件的View也可以是你Layout最外层的View) ,第二个参数是提示文字,第三个参数是显示时长,可选三个值
Snackbar.LENGTH_SHORT //短时间
Snackbar.LENGTH_LONG //长时间
Snackbar.LENGTH_INDEFINITE //一直存在不消失
2:带按钮点击事件的Snackbar
final Snackbar snackbar=Snackbar.make(v, "ActionlSnackbarShow", Snackbar.LENGTH_SHORT)
snackbar.setActionTextColor(ContextCompat.getColor(MainActivity.this,android.R.color.holo_blue_light)).setAction("I know.", new View.OnClickListener() {
public void onClick(View v) {
snackbar.dismiss()
snackbar.setActionTextColor:设置button文字的颜色
setAction():两个参数分别是button的文字和点击事件
snackbar.dismiss(); 关闭Snackbar的显示
3:定义Snackbar的外观
Snackbar 有个方法 getView (),这样就可以方便的更改Snackbar的背景颜色,透明度和显示位置了
View view = CusSnackbar.getView()
//设置背景颜色
view.setBackgroundColor(ContextCompat.getColor(MainActivity.this,android.R.color.holo_orange_dark))
//设置透明度
view.setAlpha(0.8f)
但是想要更改显示文字的颜色和位置应该怎么办呢?不着急看下Snackbar布局文件的源码
&merge xmlns:android="/apk/res/android"&
android:id="@+id/snackbar_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="@dimen/design_snackbar_padding_vertical"
android:paddingBottom="@dimen/design_snackbar_padding_vertical"
android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
android:paddingRight="@dimen/design_snackbar_padding_horizontal"
android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
android:maxLines="@integer/design_snackbar_text_max_lines"
android:layout_gravity="center_vertical|left|start"
android:ellipsize="end"/&
android:id="@+id/snackbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"
android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"
android:layout_gravity="center_vertical|right|end"
android:paddingTop="@dimen/design_snackbar_padding_vertical"
android:paddingBottom="@dimen/design_snackbar_padding_vertical"
android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
android:paddingRight="@dimen/design_snackbar_padding_horizontal"
android:visibility="gone"
android:textColor="?attr/colorAccent"
style="?attr/borderlessButtonStyle"/&
从源码中可以看到 TextView的ID是snackbar_text ,Button的ID是 snackbar_action,有了ID就可以方便的更改了
View view = CusSnackbar.getView()
//更改文字颜色
((TextView)view.findViewById(R.id.snackbar_text)).setTextColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_green_dark))
//更改文字位置
((TextView)view.findViewById(R.id.snackbar_text)).setGravity(Gravity.CENTER)
Ok大致的用法就是这样,下面是本篇Snackbar Demo的源码
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.leejz.snackbardemo.MainActivity"&
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="8dp"&
android:id="@+id/btn_Normal_snackbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="Normal Snackbar" /&
android:id="@+id/btn_Action_snackbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="Action Snackbar" /&
android:id="@+id/btn_Custom_snackbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="Custom Snackbar" /&
MainActivity
package com.leejz.snackbardemo
import android.support.design.widget.Snackbar
import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.widget.Button
import android.widget.TextView
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_Normal_snackbar
private Button btn_Action_snackbar
private Button btn_Custom_snackbar
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_Normal_snackbar = (Button) findViewById(R.id.btn_Normal_snackbar)
btn_Action_snackbar = (Button) findViewById(R.id.btn_Action_snackbar)
btn_Custom_snackbar = (Button) findViewById(R.id.btn_Custom_snackbar)
btn_Normal_snackbar.setOnClickListener(this)
btn_Action_snackbar.setOnClickListener(this)
btn_Custom_snackbar.setOnClickListener(this)
public void onClick(View v) {
switch (v.getId()) {
//普通Snackbar
case R.id.btn_Normal_snackbar:
Snackbar.make(v, "NormalSnackbarShow", Snackbar.LENGTH_INDEFINITE).show()
//点击事件的Snackbar
case R.id.btn_Action_snackbar:
final Snackbar snackbar = Snackbar.make(v, "ActionlSnackbarShow", Snackbar.LENGTH_SHORT)
snackbar.setActionTextColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_blue_light)).setAction("I know.", new View.OnClickListener() {
public void onClick(View v) {
snackbar.dismiss()
//自定义Snackbar
case R.id.btn_Custom_snackbar:
Snackbar CusSnackbar = Snackbar.make(v, "CustomSnackbarShow", Snackbar.LENGTH_SHORT)
View view = CusSnackbar.getView()
((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_green_dark))
((TextView) view.findViewById(R.id.snackbar_text)).setGravity(Gravity.CENTER)
view.setBackgroundColor(ContextCompat.getColor(MainActivity.this, android.R.color.holo_orange_dark))
view.setAlpha(0.8f)
//Snackbar位置
ViewGroup.LayoutParams vl = view.getLayoutParams()
LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(vl.width,vl.height)
ll.gravity = Gravity.TOP
view.setLayoutParams(ll)
CusSnackbar.show()
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:134902次
积分:1627
积分:1627
排名:第17237名
原创:26篇
评论:156条
文章:14篇
阅读:88432
阅读:10851
(2)(2)(4)(3)(3)(7)(1)(2)(2)

我要回帖

更多关于 snackbar setaction 的文章

 

随机推荐