나는 기본 토스트도 유지하고 싶었지만 모든 시스템에 대해 단일 토스트 레이아웃을 만드는 방법을 보여주었습니다. 그래서 나는이 도우미를 만들었습니다. 나도 알아, 그것은 해킹이지만, 그것은 나를 위해 잘 작동합니다.
여기 토스트의 원래 모양을 바꾸지 않고 텍스트 앞의 토스트에 이미지를 추가했습니다. 여기에서 텍스트 색상과 크기를 쉽게 수정할 수 있습니다.
어쩌면 누군가가
private static Toast makeImageToast(int imageResId, CharSequence text, int duration) {
Toast toast = Toast.makeText(mContext, text, duration);
View rootView = toast.getView();
LinearLayout linearLayout = null;
TextView messageTextView = null;
// check (expected) toast layout
if (rootView instanceof LinearLayout) {
linearLayout = (LinearLayout) rootView;
if (linearLayout.getChildCount() == 1) {
View child = linearLayout.getChildAt(0);
if (child instanceof TextView) {
messageTextView = (TextView) child;
}
}
}
// cancel modification because toast layout is not what we expected
if (linearLayout == null || messageTextView == null) {
// failed to create image toast layout, using usual toast
return toast;
}
ViewGroup.LayoutParams textParams = messageTextView.getLayoutParams();
((LinearLayout.LayoutParams) textParams).gravity = Gravity.CENTER_VERTICAL;
// convert dip dimension
int imageSize = dipToPixel(25);
int imageMargin = dipToPixel(15);
// setup image view layout parameters
LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(imageSize, imageSize);
imageParams.setMargins(0, 0, imageMargin, 0);
imageParams.gravity = Gravity.CENTER_VERTICAL;
// setup image view
ImageView imageView = new ImageView(mContext);
imageView.setId(TOAST_IMAGE_ID);
imageView.setImageResource(imageResId);
imageView.setLayoutParams(imageParams);
// modify root layout
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.addView(imageView, 0);
return toast;
}
public static int dipToPixel(float dip) {
return (int) (dip * mContext.getResources().getDisplayMetrics().density + 0.5f);
}
감사합니다 ...이 코드에 관심이있을 수 있습니다, 이것은 내 질문에 대답 것으로 보인다. 이것은 플랫폼에 관계없이 토스트보기를 여전히 동일하게 만들지 만, 나는 그것을 피할 수 없다고 생각합니다. –