zoukankan      html  css  js  c++  java
  • android 提示

    1、Toast:

    Toast toast=new Toast(context);  
    
            Toast.makeText(context, text, duration);//返回值为Toast  
    
            toast.setDuration(duration);//设置持续时间  
    
            toast.setGravity(gravity, xOffset, yOffset);//设置Toast的位置  
    
            toast.setText(s);//设置提示内容  
    
            toast.show();//显示  

    2、(转)Snackbars(版权声明:欢迎转载,转载请注明出处 https://blog.csdn.net/u012810020/article/details/52108818)

    简述:

        Snackbar 是 Android design support library 中的一个组件,它的作用和Toast类似,显示吐司,但Snackbar的特别之处在于Snackbar显示的提示信息可以和用户交互,更好地获取用户反馈信息。同时,它显示的吐司带有动画效果,从屏幕下方慢慢展开显示。
        Goggle官方这样介绍:“SnackBars提供了一个轻量级的反馈操作。他们在屏幕的底部显示一条简短的信息,如果是较大的设备就显示在左下角。SnackBar出现在屏幕中所有其他元素的上方,同一时间仅仅只有一条SnackBar”。总之,SnackBar的特点大致下面几条:

            ①与Toast一样可以进行吐司信息;

            ②可以与用户交互操作;

            ③一个时刻只能有唯一一个 Snackbar 显示。

     

                                             

    基本使用方法

    1、简单使用

     

     1     import android.support.design.widget.Snackbar;  
     2     import android.support.v7.app.AppCompatActivity;  
     3     import android.os.Bundle;  
     4     import android.view.View;  
     5     import android.view.ViewGroup;  
     6     import android.widget.Button;      
     7     public class MainActivity extends AppCompatActivity {       
     8         private Button btn_show;  
     9         private ViewGroup frameLayout;    
    10         @Override  
    11         protected void onCreate(Bundle savedInstanceState) {  
    12             super.onCreate(savedInstanceState);  
    13             setContentView(R.layout.activity_main);  
    14             initViews();        
    15         }      
    16         private void initViews() {  
    17            frameLayout = (ViewGroup) findViewById(android.R.id.content);  
    18            btn_show = (Button) findViewById(R.id.btn_show);     
    19            btn_show.setOnClickListener(new View.OnClickListener() {  
    20                 @Override  
    21                 public void onClick(View view) {  
    22                    Snackbar.make(view,"Hello SnackBar!",Snackbar.LENGTH_SHORT).show();  
    23                 }  
    24             });  
    25         }  
    26     }  

        其实使用的核心代码就一句:

    Snackbar.make(view,"Hello SnackBar!",Snackbar.LENGTH_SHORT).show(); 

        使用起来类似于Toast,但也有与Toast的不同之处,Toast的使用:

    Toast.makeText(MainActivity.this, "真的能够交互", Toast.LENGTH_SHORT).show();  

        他们的第一个参数不同,Toast第一个参数是Context,而Snackbar第一个参数为View,这个View就是Toast的父布局。与Toast不同的是Snackbar显示时长有三种:

          ①Snackbar.LENGTH_SHORT:与Toast.LENGHT_SHORT(大约1.x秒)一样显示较短时长后自动消失。

          ②Snackbar.LENGTH_LONG:与Toast.LENGHT_LONG(大约3秒)一样显示相对较长时间后自动消失。

          ③Snackbar.LENGTH_INDEFINITE:永不消失除非手动调用dismiss()方法去除Snackbar。

    2、可交互的Snackbar

        核心代码:

    1 final Snackbar snackbar = Snackbar.make(frameLayout, "Hello SnackBar!", Snackbar.LENGTH_INDEFINITE);  
    2               snackbar.setAction("OK?", new View.OnClickListener()                {  
    3                    @Override  
    4                    public void onClick(View view) {  
    5                      // snackbar.dismiss();  
    6                      //doSomething  
    7               }  
    8           });  
    9 snackbar.show(); 

        setAction(CharSequence text, View.OnClickListener listener)方法为用户交互的点击事件,第一个参数是点击事件的信息,第二个就是一个View.OnClickListener点击监听器。

    3、可反馈的Snackbar

        核心代码:

     1 final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "反馈监听的Snackbar", Snackbar.LENGTH_LONG);  
     2         snackbar.setAction("能交互吗", new View.OnClickListener() {  
     3             @Override  
     4             public void onClick(View view) {  
     5                 Toast.makeText(MainActivity.this, "真的能够交互", Toast.LENGTH_SHORT).show();  
     6             }  
     7         });  
     8         snackbar.setCallback(new Snackbar.Callback() {  
     9             @Override  
    10             public void onDismissed(Snackbar snackbar, int event) {  
    11                 super.onDismissed(snackbar, event);  
    12                 switch (event) {  
    13                     case Snackbar.Callback.DISMISS_EVENT_ACTION:  
    14                         Toast.makeText(MainActivity.this, "Snackbar通过Action的点击事件退出", Toast.LENGTH_SHORT).show();  
    15                         break;  
    16                     case Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE:  
    17                         Toast.makeText(MainActivity.this, "Snackbar由于新的Snackbar显示而退出", Toast.LENGTH_SHORT).show();  
    18                         break;  
    19                     case Snackbar.Callback.DISMISS_EVENT_MANUAL:  
    20                         Toast.makeText(MainActivity.this, "Snackbar通过调用dismiss()方法退出", Toast.LENGTH_SHORT).show();  
    21                         break;  
    22                     case Snackbar.Callback.DISMISS_EVENT_SWIPE:  
    23                         Toast.makeText(MainActivity.this, "Snackbar右划退出", Toast.LENGTH_SHORT).show();  
    24                         break;  
    25                     case Snackbar.Callback.DISMISS_EVENT_TIMEOUT:  
    26                         Toast.makeText(MainActivity.this, "Snackbar自然退出", Toast.LENGTH_SHORT).show();  
    27                         break;  
    28                 }  
    29             }  
    30             @Override  
    31             public void onShown(Snackbar snackbar) {  
    32                 super.onShown(snackbar);  
    33                 Toast.makeText(MainActivity.this, "Snackbar显示", Toast.LENGTH_SHORT).show();  
    34             }  
    35         });  
    36         snackbar.show(); 


    监听的实现是通过CallBack接口实现的,setCallback(Snackbar.Callback callback):Snackbar的显示与隐藏的回调接口,在该接口中可以重写两个方法:一个是onShow()在Snackbar显示时回调,另一个是onDismissed()在Snackbar隐藏时回调。另外一点就是在onDismissed()方法中可以监听到Snackbar退出的五种原因类型:

            ①Snackbar.Callback.DISMISS_EVENT_SWIPE=0:Indicates that the Snackbar was dismissed via a swipe。

                该事件下Snackbar退出的原因是;意思是“Snackbar右划退出事件”,注意这个右划事件只有在父布局为CoordinatorLayout才会被触发,其他布局如LinearLayout、RelativeLayout等是不会出发的。

            ②Snackbar.Callback.DISMISS_EVENT_ACTION = 1:Indicates that the Snackbar was dismissed via an action click。

                该事件下Snackbar退出的原因是:Snackbar通过Action点击事件触发退出。

            ③Snackbar.Callback.DISMISS_EVENT_TIMEOUT = 2:Indicates that the Snackbar was dismissed via a timeout。

                该事件下Snackbar退出的原因是:Snackbar超出通过setDuration()方法所设置的规定时间后退出,这也是正常的自然退出。

            ④Snackbar.Callback.DISMISS_EVENT_MANUAL = 3:Indicates that the Snackbar was dismissed via a call to dismiss()。

                该事件下Snackbar提出的原因是:通过手动调用了dismiss()方法。

            ⑤Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE = 4:Indicates that the Snackbar was dismissed from a new Snackbar being shown。

                该事件下Snackbar提出的原因:由于新的Snackbar的显示而退出。

    4、自定义Snackbar

        在自定义Snackbar之前需要弄清Snackbar的内部构造,打开Snackbar源码可以看到其有一个内部类Snackbar.SnackbarLayout,该内部类就是Snackbar布局,然后找到Snackbar.SnackbarLayout的布局资源文件design_layout_snackbar_include.xml,打开该文件看到一个TextView(吐司左边的信息)和一个Button(显示SnackBar右侧与用户交互的按钮)。

     1     <merge xmlns:android="http://schemas.android.com/apk/res/android">  
     2       
     3         <TextView  
     4                 android:id="@+id/snackbar_text"  
     5                 android:layout_width="wrap_content"  
     6                 android:layout_height="wrap_content"  
     7                 android:layout_weight="1"  
     8                 android:paddingTop="@dimen/design_snackbar_padding_vertical"  
     9                 android:paddingBottom="@dimen/design_snackbar_padding_vertical"  
    10                 android:paddingLeft="@dimen/design_snackbar_padding_horizontal"  
    11                 android:paddingRight="@dimen/design_snackbar_padding_horizontal"  
    12                 android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"  
    13                 android:maxLines="@integer/design_snackbar_text_max_lines"  
    14                 android:layout_gravity="center_vertical|left|start"  
    15                 android:ellipsize="end"  
    16                 android:textAlignment="viewStart"/>  
    17       
    18         <Button  
    19                 android:id="@+id/snackbar_action"  
    20                 android:layout_width="wrap_content"  
    21                 android:layout_height="wrap_content"  
    22                 android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"  
    23                 android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"  
    24                 android:layout_gravity="center_vertical|right|end"  
    25                 android:paddingTop="@dimen/design_snackbar_padding_vertical"  
    26                 android:paddingBottom="@dimen/design_snackbar_padding_vertical"  
    27                 android:paddingLeft="@dimen/design_snackbar_padding_horizontal"  
    28                 android:paddingRight="@dimen/design_snackbar_padding_horizontal"  
    29                 android:visibility="gone"  
    30                 android:textColor="?attr/colorAccent"  
    31                 style="?attr/borderlessButtonStyle"/>  
    32       
    33     </merge>  

        如果我们能够获取到该View岂不是就能随意的更改一些Snackbar的背景样式、吐司信息、吐司文字的颜色及大小、交互按钮Button的颜色与文字大小等信息了吗?不错,Snackbar提供了一个getView()方法,这个方法就可以获取到Snackbar.SnackbarLayout的实例。那么下面就来尝试一下。

                                                    

        核心代码:

     1     final Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "自定义Snackbar", Snackbar.LENGTH_LONG);  
     2            snackbar.setAction("是否OK", new View.OnClickListener() {  
     3                @Override  
     4                public void onClick(View view) {  
     5                    Toast.makeText(MainActivity.this, "真的能够交互", Toast.LENGTH_SHORT).show();  
     6                }  
     7            });  
     8            final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView();  
     9            if (snackbarView != null){  
    10                //设置SnackBar背景与透明度  
    11                snackbarView.setBackgroundResource(R.drawable.background);  
    12                snackbarView.setAlpha((float) 0.4);  
    13       
    14                //设置Action的字体颜色与大小  
    15                final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);  
    16                snackbar_action.setTextColor(Color.RED);  
    17                snackbar_action.setTextSize(convertSpToPixel(snackbarView.getContext(),10));  
    18       
    19                //这是Text的文字颜色与大小  
    20                final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);  
    21                snackbar_text.setTextColor(Color.RED);  
    22                snackbar_text.setTextSize(convertSpToPixel(snackbarView.getContext(),10));  
    23                //设置左侧icon  
    24                Drawable drawable = ContextCompat.getDrawable(MainActivity.this, R.mipmap.ic_core);  
    25                if (drawable != null) {  
    26                    drawable = fitDrawable(getResources(), drawable, (int) convertDpToPixel(24, MainActivity.this));  
    27                } else {  
    28                    throw new IllegalArgumentException("resource_id is not a valid drawable!");  
    29                }  
    30       
    31                final Drawable[] compoundDrawables = snackbar_text.getCompoundDrawables();  
    32                snackbar_text.setCompoundDrawables(drawable, compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);  
    33            }  
    34            snackbar.show();  

       对于自定义我们首先得获取Snackbar的布局:

        final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView();  

        拿到布局以后我们可以对Snackbar的背景和透明度进行设置:

        snackbarView.setBackgroundResource(R.drawable.background);  
        snackbarView.setAlpha((float) 0.4);  

        还记得刚才我们看的Snackbar的布局文件吗?里面就是一个TextView和一个Button,如果我们想要对他们进行自定义我们可以先拿到他们的布局view,首先我们看一下Button:

    final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);  

        我们拿到Button实例之后就可以对其进行自定义了:

    1     snackbar_action.setTextColor(Color.RED);  
    2     snackbar_action.setTextSize(convertSpToPixel(snackbarView.getContext(),10));  

        我们在对Snackbar里的TextView进行自定义:

    1 final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);  

        对其设置字体大小和字体颜色:

    1     snackbar_text.setTextColor(Color.RED);  
    2     snackbar_text.setTextSize(convertSpToPixel(snackbarView.getContext(),10));  

        对于TextView本身来说还有一个方法就是可以通过setCompoundDrawables(left,top,right,bottom)设置图标Icon,现在我们对Snackbar里的TextView进行左侧图标Icon的设置:

     1     //设置左侧icon  
     2                 Drawable drawable = ContextCompat.getDrawable(MainActivity.this, R.mipmap.ic_core);  
     3                 if (drawable != null) {  
     4                     drawable = fitDrawable(getResources(), drawable, (int) convertDpToPixel(24, MainActivity.this));  
     5                 } else {  
     6                     throw new IllegalArgumentException("resource_id is not a valid drawable!");  
     7                 }  
     8       
     9                 final Drawable[] compoundDrawables = snackbar_text.getCompoundDrawables();  
    10                 snackbar_text.setCompoundDrawables(drawable, compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);  

        这里的代码还用到的方法如下:

     1     /**  
     2          * 方法描述:将drawable压缩为指定宽高的drawable  
     3          *  
     4          * @param resources  
     5          * @param drawable  原始drawable  
     6          * @param sizePx    指定的drawable压缩宽高  
     7          * @return  
     8          */  
     9         private static Drawable fitDrawable(Resources resources, Drawable drawable, int sizePx) {  
    10             if (drawable.getIntrinsicWidth() != sizePx || drawable.getIntrinsicHeight() != sizePx) {  
    11                 if (drawable instanceof BitmapDrawable) {  
    12                     drawable = new BitmapDrawable(resources, Bitmap.createScaledBitmap(getBitmap(drawable), sizePx, sizePx, true));  
    13                 }  
    14             }  
    15             drawable.setBounds(0, 0, sizePx, sizePx);      
    16             return drawable;  
    17         }       
    18         /**  
    19          * 方法描述:将Drawable转化为Bitmap  
    20          *  
    21          * @param drawable  
    22          * @return  
    23          */  
    24         private static Bitmap getBitmap(Drawable drawable) {  
    25             if (drawable instanceof BitmapDrawable) {  
    26                 return ((BitmapDrawable) drawable).getBitmap();  
    27             } else if (drawable instanceof VectorDrawable) {  
    28                 return getBitmap((VectorDrawable) drawable);  
    29             } else {  
    30                 throw new IllegalArgumentException("unsupported drawable type");  
    31             }  
    32         }       
    33         /**  
    34          * 方法描述:将VectorDrawable转化为Bitmap  
    35          *  
    36          * @param vectorDrawable  
    37          * @return  
    38          */  
    39         @TargetApi(Build.VERSION_CODES.LOLLIPOP)  
    40         private static Bitmap getBitmap(VectorDrawable vectorDrawable) {  
    41             Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),  
    42                     vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);  
    43             Canvas canvas = new Canvas(bitmap);  
    44             vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());  
    45             vectorDrawable.draw(canvas);  
    46             return bitmap;  
    47         }  

         好了,Snackbar的基本用法已经差不多了,现在封装一个Snackbar的工具类吧!!!

    5、封装工具类

      1     import android.annotation.TargetApi;  
      2     import android.content.Context;  
      3     import android.content.res.Resources;  
      4     import android.graphics.Bitmap;  
      5     import android.graphics.Canvas;  
      6     import android.graphics.drawable.BitmapDrawable;  
      7     import android.graphics.drawable.Drawable;  
      8     import android.graphics.drawable.VectorDrawable;  
      9     import android.os.Build;  
     10     import android.support.annotation.Nullable;  
     11     import android.support.design.widget.Snackbar;  
     12     import android.support.v4.content.ContextCompat;  
     13     import android.util.TypedValue;  
     14     import android.view.View;  
     15     import android.widget.Button;  
     16     import android.widget.TextView;  
     17       
     18     /**  
     19      * 类描述:Snackbar工具类  
     20      * Created by lizhenya on 16/7/14.  
     21      */  
     22     public class SnackbarUtil {  
     23       
     24         private static Snackbar.SnackbarLayout getSnackbarLayout(Snackbar snackbar) {  
     25             final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView();  
     26             return snackbarView;  
     27         }  
     28       
     29       
     30         public static Snackbar shortMake(View view, CharSequence message) {  
     31             final Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_SHORT);  
     32             return snackbar;  
     33         }  
     34       
     35         public static Snackbar shortMake(View view, int messageId) {  
     36             final Snackbar snackbar = Snackbar.make(view, messageId, Snackbar.LENGTH_LONG);  
     37             return snackbar;  
     38         }  
     39       
     40         public static Snackbar longMake(View view, CharSequence message) {  
     41             final Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_SHORT);  
     42             return snackbar;  
     43         }  
     44       
     45         public static Snackbar longMake(View view, int messageId) {  
     46             final Snackbar snackbar = Snackbar.make(view, messageId, Snackbar.LENGTH_LONG);  
     47             return snackbar;  
     48         }  
     49       
     50         public static Snackbar indefiniteMake(View view, CharSequence message) {  
     51             final Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE);  
     52             return snackbar;  
     53         }  
     54       
     55         public static Snackbar indefiniteMake(View view, int messageId) {  
     56             final Snackbar snackbar = Snackbar.make(view, messageId, Snackbar.LENGTH_INDEFINITE);  
     57             return snackbar;  
     58         }  
     59       
     60         /**  
     61          * 方法描述:设置Snackbar的透明度  
     62          *  
     63          * @param snackbar  
     64          * @param alpha  
     65          */  
     66         public static void setSnackbarAlpha(Snackbar snackbar, float alpha) {  
     67             final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);  
     68             if (snackbarView == null) return;  
     69             snackbarView.setAlpha(alpha);  
     70         }  
     71       
     72         /**  
     73          * 方法描述:设置Snackbar的背景颜色  
     74          *  
     75          * @param snackbar  
     76          * @param color  
     77          */  
     78         public static void setSnackbarBackgroundColor(Snackbar snackbar, int color) {  
     79             final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);  
     80             if (snackbarView == null) return;  
     81             snackbarView.setBackgroundColor(color);  
     82         }  
     83       
     84         /**  
     85          * 方法描述:设置Snackbar的背景图片资源  
     86          *  
     87          * @param snackbar  
     88          * @param resId  
     89          */  
     90         public static void setSnackbarBackgroudResource(Snackbar snackbar, int resId) {  
     91             final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);  
     92             if (snackbarView == null) return;  
     93             snackbarView.setBackgroundResource(resId);  
     94         }  
     95       
     96         /**  
     97          * 方法描述:设置Snackbar中Action的字体颜色  
     98          *  
     99          * @param snackbar  
    100          * @param color  
    101          */  
    102         public static void setActionTextColor(Snackbar snackbar, int color) {  
    103             //snackbar.setActionTextColor(color);  
    104             final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);  
    105             if (snackbarView == null) return;  
    106             final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);  
    107             snackbar_action.setTextColor(color);  
    108         }  
    109       
    110         /**  
    111          * 方法描述:设置Snackbar中Action的字体大小  
    112          *  
    113          * @param snackbar  
    114          * @param size     Action的字体大小(单位为sp)  
    115          */  
    116         public static void setActionTextSize(Snackbar snackbar, float size) {  
    117             final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);  
    118             if (snackbarView == null) return;  
    119             final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);  
    120             snackbar_action.setTextSize(sp2px(snackbarView.getContext(), size));  
    121         }  
    122       
    123         /**  
    124          * 方法描述:设置SnackBar左侧TextView控件的文字颜色和大小  
    125          *  
    126          * @param snackbar  
    127          * @param color    TextView控件的文字颜色  
    128          * @param size     TextView控件的文字大小  
    129          */  
    130         public static void setTextColorAndSize(Snackbar snackbar, @Nullable int color, @Nullable float size) {  
    131             final Snackbar.SnackbarLayout snackbarView = getSnackbarLayout(snackbar);  
    132             if (snackbarView == null) return;  
    133             final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);  
    134             if (color != 0) {  
    135                 snackbar_text.setTextColor(color);  
    136             }  
    137             if (size != 0) {  
    138                 snackbar_text.setTextSize(size);  
    139             }  
    140         }  
    141       
    142       
    143         /**  
    144          * 方法描述:在Snackbar左侧添加icon  
    145          *  
    146          * @param snackbar      Snackbar实例  
    147          * @param drawableResId 添加的icon资源ID  
    148          * @param sizeDp        icon的宽度与高度值  
    149          */  
    150         public static void setIconLeft(Snackbar snackbar, int drawableResId, float sizeDp) {  
    151             final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) getSnackbarLayout(snackbar);  
    152             if (snackbarView == null) return;  
    153             //snackbar不同于Toast,snackbar依赖于Activity而存在  
    154             final Context mContext = snackbarView.getContext();  
    155             if (mContext == null) {  
    156                 return;  
    157             }  
    158             final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);  
    159       
    160             Drawable drawable = ContextCompat.getDrawable(mContext, drawableResId);  
    161             if (drawable != null) {  
    162                 drawable = fitDrawable(mContext.getResources(), drawable, (int) convertDpToPixel(sizeDp, mContext));  
    163             } else {  
    164                 throw new IllegalArgumentException("resource_id is not a valid drawable!");  
    165             }  
    166       
    167             final Drawable[] compoundDrawables = snackbar_text.getCompoundDrawables();  
    168             snackbar_text.setCompoundDrawables(drawable, compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);  
    169         }  
    170       
    171         /**  
    172          * 方法描述:将drawable压缩为指定宽高的drawable  
    173          *  
    174          * @param resources  
    175          * @param drawable  原始drawable  
    176          * @param sizePx    指定的drawable压缩宽高  
    177          * @return  
    178          */  
    179         private static Drawable fitDrawable(Resources resources, Drawable drawable, int sizePx) {  
    180             if (drawable.getIntrinsicWidth() != sizePx || drawable.getIntrinsicHeight() != sizePx) {  
    181                 if (drawable instanceof BitmapDrawable) {  
    182                     drawable = new BitmapDrawable(resources, Bitmap.createScaledBitmap(getBitmap(drawable), sizePx, sizePx, true));  
    183                 }  
    184             }  
    185             drawable.setBounds(0, 0, sizePx, sizePx);  
    186       
    187             return drawable;  
    188         }  
    189       
    190         /**  
    191          * 方法描述:将Drawable转化为Bitmap  
    192          *  
    193          * @param drawable  
    194          * @return  
    195          */  
    196         private static Bitmap getBitmap(Drawable drawable) {  
    197             if (drawable instanceof BitmapDrawable) {  
    198                 return ((BitmapDrawable) drawable).getBitmap();  
    199             } else if (drawable instanceof VectorDrawable) {  
    200                 return getBitmap((VectorDrawable) drawable);  
    201             } else {  
    202                 throw new IllegalArgumentException("unsupported drawable type");  
    203             }  
    204         }  
    205       
    206         /**  
    207          * 方法描述:将VectorDrawable转化为Bitmap  
    208          *  
    209          * @param vectorDrawable  
    210          * @return  
    211          */  
    212         @TargetApi(Build.VERSION_CODES.LOLLIPOP)  
    213         private static Bitmap getBitmap(VectorDrawable vectorDrawable) {  
    214             Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),  
    215                     vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);  
    216             Canvas canvas = new Canvas(bitmap);  
    217             vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());  
    218             vectorDrawable.draw(canvas);  
    219             return bitmap;  
    220         }  
    221       
    222         /**  
    223          * 方法描述:dp转化为px  
    224          *  
    225          * @param dpValue  
    226          * @param context  
    227          * @return  
    228          */  
    229         private static float convertDpToPixel(float dpValue, Context context) {  
    230             return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,  
    231                     dpValue, context.getResources().getDisplayMetrics());  
    232         }  
    233       
    234         /**  
    235          * sp转px  
    236          *  
    237          * @param context  
    238          * @param spVal  
    239          * @return  
    240          */  
    241         public static int convertSpToPixel(Context context, float spVal) {  
    242             return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,  
    243                     spVal, context.getResources().getDisplayMetrics());  
    244         }  
    245       
    246         public static int sp2px(Context context, float spValue) {  
    247             final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  
    248             return (int) (spValue * fontScale + 0.5f);  
    249         }  
    250       
    251     }  

    顶部展示的SnackBar

         文章最后介绍一个第三方框架。系统默认的Snackbar是从屏幕底部弹出的,如果想要改变其弹出位置可以将其父控件置于想要弹出的屏幕位置,但是即使这样做也不能改变动画,现在介绍一个从顶部弹出的Snackbar框架TSnackbar,github链接:https://github.com/AndreiD/TSnackBar

                                                             

     

     

    Snackbar使用源码下载:http://download.csdn.net/detail/u012810020/9594379

    3、AlertDialog 

     1    new AlertDialog.Builder(this)
     2         .setTitle("标题")  //  ;
     3         .setMessage("message")
     4         .setIcon(R.drawable.ic_launcher_background)  //  图标
     5         .setNegativeButton("取消",new DialogInterface.OnClickListener(){
     6             @Override
     7             public void onClick(DialogInterface dialog, int which) {
     8                 //  do  something
     9             }
    10         })
    11         .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    12             @Override
    13             public void onClick(DialogInterface dialog, int which) {
    14                 //  do   something
    15             }
    16         })
    17          .setView(new EditText(this)) // 还可以 加入额外view来实现额外功能
    18          .create()
    19          .show();




    还可以使用,LayoutInflater布局文件转化为 view对象 放进 Alert
    
    
    1  LayoutInflater layoutInflater =  LayoutInflater.from(MainActivity.this); //context
    2 LinearLayout layout = (LinearLayout) layoutInflater.inflate(R.layout.acvitity_alert,null);//自定义的layout
    3 Dialog dialog = new AlertDialog.Builder(this).create();
    4 dialog.show();
    5  dialog.getWindow().setContentView(layout);
    
    
    
     

    4、 AlertView

      

  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/the-wang/p/8942298.html
Copyright © 2011-2022 走看看