自定義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 如有侵權 請聯絡我刪除
相關文章
- 自定義Toast樣式AST
- mui toast自定義樣式UIAST
- Android 自定義Toast,修改Toast樣式和顯示時長AndroidAST
- 自定義ToastAST
- 【Android開發點滴】自定義Toast樣式AndroidAST
- Android自定義ToastAndroidAST
- Android 自定義Toast及BUGAndroidAST
- 一個可以自定義的ToastAST
- 微信小程式之『自定義toast』微信小程式AST
- Toast改變背景以及度數設定AST
- 自定義Toast及視窗透明處理AST
- Android Toast 預設和自定義使用AndroidAST
- Android中自定義Toast文字大小AndroidAST
- Android 自定義Toast實現多次觸發只會顯示一次toastAndroidAST
- 百度小程式自定義通用toast元件AST元件
- Android-重新包裝Toast,自定義背景AndroidAST
- Android中自定義特定顏色的ToastAndroidAST
- Android 程式設計程式碼-自定義 ToastAndroid程式設計AST
- Ionic3全域性修改toast樣式AST
- uni-app 自定義loading 自定義toast 相容小程式&APPAPPAST
- 自定義Toast的背景顏色大小及字型大小AST
- Android Toast 自定義背景、圖片 隨心使用AndroidAST
- Android自定義邊框背景顏色的ToastAndroidAST
- jq如何改變css樣式寬度CSS
- ToastAST
- 微信開發之自定義元件(Toast)元件AST
- van-toastAST
- Flutter bot_toast是怎樣煉成的FlutterAST
- Toast,popupWindow,AlertDialogAST
- Android Toast小解AndroidAST
- Toast原始碼深度分析AST原始碼
- Toast 元件實現思路AST元件
- 如何理解postgresql toast表SQLAST
- PostgreSQL TOAST 技術解析SQLAST
- Xposed去除抖音Toast教程AST
- ReactNative實現ToastReactAST
- 防止Toast重複提醒AST
- 如何自定義 drag 樣式