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

      

  • 相关阅读:
    HDUOJ---1863畅通工程
    HDUOJ---1879 继续畅通工程
    HDUOJ---1102Constructing Roads
    HDUOJ---1102Constructing Roads
    hdu--DFS
    poj1611---The Suspects
    nyoj-----幸运三角形
    HDUOJ --2523
    HDUOJ---1195Open the Lock
    HDUOJ----2952Counting Sheep
  • 原文地址:https://www.cnblogs.com/the-wang/p/8942298.html
Copyright © 2011-2022 走看看