自定義Toast樣式+改變Toast寬高
最近在一個專案的開發中有一個需要自定義Toast樣式的需求,起初想想應該不復雜,不過在寫程式碼的時候就發現不能改變Toast的寬高大小,沒辦法,只有一步一步的看原始碼解決。如果你檢視原始碼會發現Toast的大小是由內容所佔大小決定的,因此我們要解決的就是固定內容的大小。廢話不多說,上程式碼。
1.首先畫一個自定義Toast樣式的佈局toast_clear_layout.xml,如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_relative"
android:background="@drawable/toast_shape"
android:layout_width="130dp"
android:layout_height="130dp">
<LinearLayout
android:id="@+id/toast_linear"
android:padding="10dp"
android:orientation="vertical"
android:layout_width="130dp"
android:layout_height="130dp">
<ImageView
android:layout_marginTop="20dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginBottom="10dp"
android:src="@mipmap/toast_ok" />
<TextView
android:layout_marginTop="-10dp"
android:id="@+id/tv_toast_clear"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="30dp"
android:textSize="13sp"
android:textColor="#fff"
android:text="已清空小紙條記錄" />
</LinearLayout>
</RelativeLayout>
效果如下
2.Java程式碼
(大家注意:這裡有個坑,在佈局檔案中設定的寬高度不會起作用,必須在程式碼中動態設定,而且還不能設定佈局檔案的根節點的寬高度,一樣無效,因此我設定LinearLayout的寬高度)
//自定義Toast控制元件
View toastView =LayoutInflater.from(SmallPaperActivity.this).inflate(R.layout.toast_clear_layout, null);
LinearLayout relativeLayout = (LinearLayout)toastView.findViewById(R.id.toast_linear);
//動態設定toast控制元件的寬高度,寬高分別是130dp
//這裡用了一個將dp轉換為px的工具類PxUtil
RelativeLayout.LayoutParams layoutParams = newRelativeLayout.LayoutParams((int) PxUtil.dpToPx(SmallPaperActivity.this, 130), (int)PxUtil.dpToPx(SmallPaperActivity.this, 130));
relativeLayout.setLayoutParams(layoutParams);
TextView textView = (TextView)toastView.findViewById(R.id.tv_toast_clear);
textView.setText("已清空小紙條記錄");
Toast toast = new Toast(SmallPaperActivity.this);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setView(toastView);
toast.show();
PxUtil工具類:dp與px單位相互轉換的工具類
import android.content.Context;
/**
* Created by L_Alden on 2016/11/10.
* px與dp相互轉換工具類
*/
public class PxUtil {
public static float dpToPx(Context context, int dp) {
//獲取遮蔽的畫素密度係數
float density = context.getResources().getDisplayMetrics().density;
return dp * density;
}
public static float pxTodp(Context context, int px) {
//獲取遮蔽的畫素密度係數
float density = context.getResources().getDisplayMetrics().density;
return px / density;
}
}
這樣就可以結束了,下面上效果圖
toast效果圖.png
本文轉載自https://www.jianshu.com/p/491b17281c0a 如有侵權 請聯絡我刪除
相關文章
- mui toast自定義樣式UIAST
- Android 自定義Toast及BUGAndroidAST
- Android中自定義Toast文字大小AndroidAST
- 微信開發之自定義元件(Toast)元件AST
- uni-app 自定義loading 自定義toast 相容小程式&APPAPPAST
- 百度小程式自定義通用toast元件AST元件
- Ionic3全域性修改toast樣式AST
- 自定義Toast的背景顏色大小及字型大小AST
- ToastAST
- jq如何改變css樣式寬度CSS
- van-toastAST
- Flutter bot_toast是怎樣煉成的FlutterAST
- ReactNative實現ToastReactAST
- 自定義元件-樣式元件
- Toast原始碼深度分析AST原始碼
- Toast 元件實現思路AST元件
- PostgreSQL TOAST 技術解析SQLAST
- 如何理解postgresql toast表SQLAST
- Qt Charts 自定義樣式QT
- cnBlogs的自定義樣式
- checkbox/radio自定義樣式
- 如何自定義 drag 樣式
- 基於mpvue的toast元件VueAST元件
- 如何捕捉太快消失的 toastAST
- input[type="radio"]自定義樣式
- CefSharp自定義捲軸樣式
- React Native 純 javascript toast實現React NativeJavaScriptAST
- [Android] Toast問題深度剖析(二)AndroidAST
- [Android] Toast問題深度剖析(一)AndroidAST
- Flutter Toast、彈出提示、輕提示FlutterAST
- React實現簡單易用ToastReactAST
- this.$toast() 瞭解一下?AST
- Toast與Snackbar的那點事AST
- Houdini - 建立自定義的button樣式
- QFileDialog自定義樣式設定SetStytlesheet
- 本部落格園自定義樣式
- Flutter Overlay、OverlayState、OverlayEntry 疊加 Toast DemoFlutterAST
- springboot -- 2.0版本自定義ReidsCacheManager的改變Spring Boot