<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Android特效專輯(三)——自定義不一樣的Toast ~~~ 大家都知道,Android的控件有時候很難滿足我們的需求,所以我們需要自定義View。自定義的方式很多,有繼承原生控件也有直接自定義View的,今天寫的是自定義的Toast,當然,這個不是復寫Toast,是換一種表達形式,哈哈,后續會增加自定義View的方方面面 ~~~ > 這里啰嗦幾句,我看到網上很多教程寫的很不詳細,就像是直接CV過來的一樣,所以有時間我就會把我需要的東西寫起來,然后盡可能的描述的清楚一點,以后我工作用到了就可以直接拿來用了,同時也可以把有用的星系分享給大家,這就是我寫博客 的初衷了,經常去墻外面找的好例子,我也是摸透了才放在我博客上,如果以后有疑問或者不懂的,可以加我QQ溝通 ~~~ 先來看看效果圖吧 ~~~ ![這里寫圖片描述](https://box.kancloud.cn/2016-02-24_56cd2c1718703.jpg "") ~~~ 是不是挺好看的,如果你看過Toast的源碼就會知道,他主要是用了WindowManager,我們也直接來寫一個 ~~~ ### TabToast ~~~ package com.lgl.toast; import android.content.Context; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class TabToast { /** * Toast字體大小 */ private static final float DEFAULT_TEXT_SIZE = 14; /** * Toast字體顏色 */ private static final int DEFAULT_TEXT_COLOR = 0xffffffff; /** * Toast背景顏色 */ private static final int DEFAULT_BG_COLOR = 0xE6f5695a; /** * Toast的高度(單位dp) */ private static final float DEFAULT_TOAST_HEIGHT = 50.0f; private static Context mContext; private volatile static TabToast mInstance; private static Toast mToast; private View layout; private TextView tv; public TabToast(Context context) { mContext = context; } /** * 單例模式 * * @param context * 傳入的上下文 * @return TabToast實例 */ private static TabToast getInstance(Context context) { if (mInstance == null) { synchronized (TabToast.class) { if (mInstance == null) { mInstance = new TabToast(context.getApplicationContext()); } } } return mInstance; } private static void getToast(int duration) { //設置位置int gravity, int xOffset, int yOffset if (mToast == null) { mToast = new Toast(mContext); mToast.setGravity(Gravity.BOTTOM, 0, 0); //設置顯示時間 mToast.setDuration(duration == Toast.LENGTH_LONG ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT); } } public static void makeText(Context context, String text) { makeText(context, text, Toast.LENGTH_SHORT); } public static void makeText(Context context, String text, int duration) { getInstance(context); getToast(duration); if (mInstance.layout == null || mInstance.tv == null) { LinearLayout container = new LinearLayout(mContext); LinearLayout.LayoutParams rootParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); container.setLayoutParams(rootParams); container.setBackgroundColor(DEFAULT_BG_COLOR); container.setGravity(Gravity.CENTER); mInstance.tv = new TextView(mContext); LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams( getScreenWidth(mContext), dp2px(DEFAULT_TOAST_HEIGHT)); mInstance.tv.setLayoutParams(tvParams); mInstance.tv.setPadding(dp2px(5), dp2px(2), dp2px(5), dp2px(2)); mInstance.tv.setGravity(Gravity.CENTER); mInstance.tv.setTextColor(DEFAULT_TEXT_COLOR); mInstance.tv.setMaxLines(2); mInstance.tv.setEllipsize(TextUtils.TruncateAt.END); mInstance.tv.setBackgroundColor(DEFAULT_BG_COLOR); mInstance.tv.setTextSize(DEFAULT_TEXT_SIZE); container.addView(mInstance.tv); mInstance.layout = container; mToast.setView(mInstance.layout); } mInstance.tv.setText(text); mToast.show(); } /** * dp轉px * * @param value * dp * @return px */ public static int dp2px(float value) { float scale = mContext.getResources().getDisplayMetrics().density; return (int) (value * scale + 0.5f); } /** * 獲得屏幕寬度 * * @param context * Context * @return px */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); float density = outMetrics.density; return (int) (outMetrics.widthPixels * density); } } ~~~ ~~~ 然后直接調用就可以了 ~~~ ~~~ TabToast.makeText(MainActivity.this, "自定義Toast"); ~~~ ### Demo下載地址:[http://download.csdn.net/detail/qq_26787115/9391760](http://download.csdn.net/detail/qq_26787115/9391760)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看