实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
/* * Copyright 2012 Evgeny Shishkin * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.colortoast; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.FrameLayout; import android.widget.TextView; /** * In-layout notifications. Based on {@link android.widget.Toast} notifications * and article by Cyril Mottier (http://android.cyrilmottier.com/?p=773). * * @author e.shishkin */ public class AppMsg { /** * Show the view or text notification for a short period of time. This time * could be user-definable. This is the default. * * @see #setDuration */ public static final int LENGTH_SHORT = 3000; /** * Show the view or text notification for a long period of time. This time * could be user-definable. * * @see #setDuration */ public static final int LENGTH_LONG = 5000; /** * Show the text notification for a long period of time with a negative style. */ public static final Style STYLE_ALERT = new Style(LENGTH_LONG, R.color.alert); /** * Show the text notification for a short period of time with a positive style. */ public static final Style STYLE_CONFIRM = new Style(LENGTH_SHORT, R.color.confirm); /** * Show the text notification for a short period of time with a neutral style. */ public static final Style STYLE_INFO = new Style(LENGTH_SHORT, R.color.info); private final Activity mActivity; private int mDuration = LENGTH_SHORT; private View mView; private LayoutParams mLayoutParams; private boolean mFloating; /** * Construct an empty AppMsg object. You must call {@link #setView} before * you can call {@link #show}. * * @param activity {@link android.app.Activity} to use. */ public AppMsg(Activity activity) { mActivity = activity; } /** * Make a {@link AppMsg} that just contains a text view. * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param text The text to show. Can be formatted text. * @param style The style with a background and a duration. */ public static AppMsg makeText(Activity context, CharSequence text, Style style) { return makeText(context, text, style, R.layout.app_msg); } /** * @author mengguoqiang 扩展支持设置字体大小 * Make a {@link AppMsg} that just contains a text view. * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param text The text to show. Can be formatted text. * @param style The style with a background and a duration. */ public static AppMsg makeText(Activity context, CharSequence text, Style style, float textSize) { return makeText(context, text, style, R.layout.app_msg, textSize); } /** * Make a {@link AppMsg} with a custom layout. The layout must have a {@link TextView} com id {@link android.R.id.message} * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param text The text to show. Can be formatted text. * @param style The style with a background and a duration. */ public static AppMsg makeText(Activity context, CharSequence text, Style style, int layoutId) { LayoutInflater inflate = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflate.inflate(layoutId, null); return makeText(context, text, style, v, true); } /** * @author mengguoqiang 扩展支持字体大小 * Make a {@link AppMsg} with a custom layout. The layout must have a {@link TextView} com id {@link android.R.id.message} * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param text The text to show. Can be formatted text. * @param style The style with a background and a duration. */ public static AppMsg makeText(Activity context, CharSequence text, Style style, int layoutId, float textSize) { LayoutInflater inflate = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflate.inflate(layoutId, null); return makeText(context, text, style, v, true, textSize); } /** * Make a non-floating {@link AppMsg} with a custom view presented inside the layout. * It can be used to create non-floating notifications if floating is false. * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param customView * View to be used. * @param text The text to show. Can be formatted text. * @param style The style with a background and a duration. */ public static AppMsg makeText(Activity context, CharSequence text, Style style, View customView) { return makeText(context, text, style, customView, false); } /** * Make a {@link AppMsg} with a custom view. It can be used to create non-floating notifications if floating is false. * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param view * View to be used. * @param text The text to show. Can be formatted text. * @param style The style with a background and a duration. * @param floating true if it'll float. */ private static AppMsg makeText(Activity context, CharSequence text, Style style, View view, boolean floating) { return makeText(context, text, style, view, floating, 0); } /** * * @author mengguoqiang 扩展支持设置字体大小 * Make a {@link AppMsg} with a custom view. It can be used to create non-floating notifications if floating is false. * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param view * View to be used. * @param text The text to show. Can be formatted text. * @param style The style with a background and a duration. * @param floating true if it'll float. */ private static AppMsg makeText(Activity context, CharSequence text, Style style, View view, boolean floating, float textSize) { AppMsg result = new AppMsg(context); view.setBackgroundResource(style.background); TextView tv = (TextView) view.findViewById(android.R.id.message); if(textSize > 0) tv.setTextSize(textSize); tv.setText(text); result.mView = view; result.mDuration = style.duration; result.mFloating = floating; return result; } /** * Make a {@link AppMsg} with a custom view. It can be used to create non-floating notifications if floating is false. * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param resId The resource id of the string resource to use. Can be * formatted text. * @param style The style with a background and a duration. * @param floating true if it'll float. */ public static AppMsg makeText(Activity context, int resId, Style style, View customView, boolean floating) { return makeText(context, context.getResources().getText(resId), style, customView, floating); } /** * Make a {@link AppMsg} that just contains a text view with the text from a * resource. * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param resId The resource id of the string resource to use. Can be * formatted text. * @param style The style with a background and a duration. * @throws Resources.NotFoundException if the resource can't be found. */ public static AppMsg makeText(Activity context, int resId, Style style) throws Resources.NotFoundException { return makeText(context, context.getResources().getText(resId), style); } /** * Make a {@link AppMsg} with a custom layout using the text from a * resource. The layout must have a {@link TextView} com id {@link android.R.id.message} * * @param context The context to use. Usually your * {@link android.app.Activity} object. * @param resId The resource id of the string resource to use. Can be * formatted text. * @param style The style with a background and a duration. * @throws Resources.NotFoundException if the resource can't be found. */ public static AppMsg makeText(Activity context, int resId, Style style, int layoutId) throws Resources.NotFoundException { return makeText(context, context.getResources().getText(resId), style, layoutId); } /** * Show the view for the specified duration. */ public void show() { MsgManager manager = MsgManager.obtain(mActivity); manager.add(this); } /** * @return <code>true</code> if the {@link AppMsg} is being displayed, else <code>false</code>. */ public boolean isShowing() { if (mFloating) { return mView != null && mView.getParent() != null; } else { return mView.getVisibility() == View.VISIBLE; } } /** * Close the view if it's showing, or don't show it if it isn't showing yet. * You do not normally have to call this. Normally view will disappear on its own * after the appropriate duration. */ public void cancel() { MsgManager.obtain(mActivity).clearMsg(this); } /** * Cancels all queued {@link AppMsg}s, in all Activities. If there is a {@link AppMsg} * displayed currently, it will be the last one displayed. */ public static void cancelAll() { MsgManager.clearAll(); } /** * Cancels all queued {@link AppMsg}s, in given {@link android.app.Activity}. * If there is a {@link AppMsg} displayed currently, it will be the last one displayed. * @param activity */ public static void cancelAll(Activity activity) { MsgManager.release(activity); } /** * Return the activity. */ public Activity getActivity() { return mActivity; } /** * Set the view to show. * * @see #getView */ public void setView(View view) { mView = view; } /** * Return the view. * * @see #setView */ public View getView() { return mView; } /** * Set how long to show the view for. * * @see #LENGTH_SHORT * @see #LENGTH_LONG */ public void setDuration(int duration) { mDuration = duration; } /** * Return the duration. * * @see #setDuration */ public int getDuration() { return mDuration; } /** * Update the text in a AppMsg that was previously created using one of the makeText() methods. * * @param resId The new text for the AppMsg. */ public void setText(int resId) { setText(mActivity.getText(resId)); } /** * Update the text in a AppMsg that was previously created using one of the makeText() methods. * * @param s The new text for the AppMsg. */ public void setText(CharSequence s) { if (mView == null) { throw new RuntimeException("This AppMsg was not created with AppMsg.makeText()"); } TextView tv = (TextView) mView.findViewById(android.R.id.message); if (tv == null) { throw new RuntimeException("This AppMsg was not created with AppMsg.makeText()"); } tv.setText(s); } /** * Gets the crouton's layout parameters, constructing a default if necessary. * * @return the layout parameters */ public LayoutParams getLayoutParams() { if (mLayoutParams == null) { mLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); } return mLayoutParams; } /** * Sets the layout parameters which will be used to display the crouton. * * @param layoutParams The layout parameters to use. * @return <code>this</code>, for chaining. */ public AppMsg setLayoutParams(LayoutParams layoutParams) { mLayoutParams = layoutParams; return this; } /** * Constructs and sets the layout parameters to have some gravity. * * @param gravity the gravity of the Crouton * @return <code>this</code>, for chaining. * @see android.view.Gravity */ public AppMsg setLayoutGravity(int gravity) { mLayoutParams = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, gravity); return this; } /** * Return the value of floating. * * @see #setFloating(boolean) */ public boolean isFloating() { return mFloating; } /** * Sets the value of floating. * * @param mFloating */ public void setFloating(boolean mFloating) { this.mFloating = mFloating; } /** * The style for a {@link AppMsg}. * * @author e.shishkin */ public static class Style { private final int duration; private final int background; /** * Construct an {@link AppMsg.Style} object. * * @param duration How long to display the message. Either * {@link #LENGTH_SHORT} or {@link #LENGTH_LONG} * @param resId resource for AppMsg background */ public Style(int duration, int resId) { this.duration = duration; this.background = resId; } /** * Return the duration in milliseconds. */ public int getDuration() { return duration; } /** * Return the resource id of background. */ public int getBackground() { return background; } @Override public boolean equals(Object o) { if (!(o instanceof AppMsg.Style)) { return false; } Style style = (Style) o; return style.duration == duration && style.background == background; } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论