浅谈Toast实际开发中的应用需求之设定位置或自定义布局

来源:互联网 发布:钢笔淘宝店 编辑:程序博客网 时间:2024/05/23 16:39

原生的安卓Toast提示栏在UI界面底端,若与用户交互的焦点在屏幕偏上方,则需要稍作调整以达到友好的提示用户相关信息的需求。

1)Toast提示有两个Toast类的静态方法,需区别开来。

①Toast.maketext(Context context,Charsequence text,int duration).show();Context上下文,“Charsequence text”来设定提示用户的提示,里面设定的字符串内容。int duration 参数支持Toast类提供的静态常量,LENGTH_SHORT/0 表示短时间,LENGTH_LONG/1表示长时间

 

②Toast makeText(Context context, StringRes int resId, Duration int duration) 在源代码中可以看出

   ① 与② 就中间参数有点差异,返回的结果则差之千里,①返回的是Toast对象②返回的是本身,源代码中这个API 除了抛了个异常throws Resources.NotFoundException之外什么都没做。

2)下面谈一下实际应用,通常我们在代码中用如下来创建一个提示:

图片          

 
                                                                                                                                                 

3)原生的Toast我们一般在开发过程中用用没问题,如果在开发的App中有的需要设置Toast提示的位置,达到提示的醒目的友好目的,那么就需要我们设定位置或者自定义布局来达到需求了。实现步骤如下:
①先通过Toast的无参构造方法new一个Toast对象,然后调用Toast对象的setView (View view)方法 需要传入一个view 对象。
②调用Context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)获得LayoutInflater 对象inflate
③调用inflate.inflate(int resource,
ViewGroup root)即可获得view对象
④调用Toast.setGravity(int gravity, int xOffset, int yOffset)设置消息提示的位置
⑤调用Toast对象的show()方法即可达到目的。

图片c图
 
 
如C图所示,我们不仅可以定义Toast提示的位置,或者自定义布局来实现我们实际开发中的需求,实现代码如下:
 
LayoutInflater inflate = (LayoutInflater)MainActivity.this.getSystemService    (Context.LAYOUT_INFLATER_SERVICE);
View view = inflate.inflate(R.layout.toast_view,null);
//R.layout.toast_view 是我们自定义的Toast提示的布局文件
Toast toast = new Toast(MainActivity.this);
toast.setGravity(Gravity.CENTER,0,0);
//两个 int 类型的指的是X或Y轴的偏移量,可设定提示的位置。
toast.setView(view);
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();
 
如下代码是Toast类源码中的静态方法,通常情况下,我们正是调用该类的此方法获得Toast对象的,然后调用.show()来显示提示框。

    public static Toast makeText(Context context, CharSequence text, int duration) {
        Toast result = new Toast(context);

        LayoutInflater inflate = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
        TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
        tv.setText(text);
       
        result.mNextView = v;
        result.mDuration = duration;

        return result;
    }

 

 
搜索
0 0
原创粉丝点击