@NonNull CharSequence text, @Duration int duration) {
Toast result = new Toast(context, looper);
LayoutInflater inflate = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
tv.setText(text);
result.mNextView = v;
result.mDuration = duration;
return result;
}
这几行的代码重点在哪呢,在这:
View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
引用了一个布局来显示信息
这个layout也非常的简单:
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”
android:background=“?android:attr/toastFrameBackground”>
<TextView
android:id=“@android:id/message”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_weight=“1”
android:layout_marginHorizontal=“24dp”
android:layout_marginVertical=“15dp”
android:layout_gravity=“center_horizontal”
android:textAppearance=“@style/TextAppearance.Toast”
android:textColor=“@color/primary_text_default_materiaal_light”/>
根布局LinearLayout
和TextView
显示文本。
所以才有了前面报错的这行代码:
val linearLayout = toast!!.view as LinearLayout
现在看来其实是没有错的,事实上运行在Android11
以下也确实没问题。
setView
、getView
也是没问题的
/**
-
Set the view to show.
-
@see #getView
*/
public void setView(View view) {
mNextView = view;
}
/**
-
Return the view.
-
@see #setView
*/
public View getView() {
return mNextView;
}
author:yechaoa
compileSdkVersion 30之后
重点来了,在compileSdkVersion 30
之后,源码是有改动的
还是直接看重点makeText
:
public static Toast makeText(@NonNull Context context, @Nullable Looper looper,
@NonNull CharSequence text, @Duration int duration) {
if (Compatibility.isChangeEnabled(CHANGE_TEXT_TOASTS_IN_THE_SYSTEM)) {
Toast result = new Toast(context, looper);
result.mText = text;
result.mDuration = duration;
return result;
} else {
Toast result = new Toast(context, looper);
View v = ToastPresenter.getTextToastView(context, text);
result.mNextView = v;
result.mDuration = duration;
return result;
}
}
嗯?view的获取方式变了,原来是inflate
的方式,现在是
View v = ToastPresenter.getTextToastView(context, text);
ok,继续看ToastPresenter.getTextToastView
public class ToastPresenter {
…
@VisibleForTesting
public static final int TEXT_TOAST_LAYOUT = R.layout.transient_notification;
/**
- Returns the default text toast view for message {@code text}.
*/
public static View getTextToastView(Context context, CharSequence text) {
View view = LayoutInflater.from(context).inflate(TEXT_TOAST_LAYOUT, null);
TextView textView = view.findViewById(com.android.internal.R.id.message);
textView.setText(text);
return view;
}
}
到这里是不是有点熟悉了,没错,跟compileSdkVersion 28
中的源码差不多,但是layout变成常量
了,且有@VisibleForTesting
注解,不过xml
代码还是一样的。
而且setView
、getView
也弃用的
/**
-
Set the view to show.
-
@see #getView
-
@deprecated Custom toast views are deprecated. Apps can create a standard text toast with the
-
{@link #makeText(Context, CharSequence, int)} method, or use a
-
<a href="{@docRoot}reference/com/google/android/material/snackbar/Snackbar">Snackbar</a>
-
when in the foreground. Starting from Android {@link Build.VERSION_CODES#R}, apps
-
targeting API level {@link Build.VERSION_CODES#R} or higher that are in the background
-
will not have custom toast views displayed.
*/
@Deprecated
public void setView(View view) {
mNextView = view;
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
**要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】点击:Android架构视频+BAT面试专题PDF+学习笔记即可获取!
[外链图片转存中…(img-sKDcKFcq-1711286968582)]
最后
**要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。
[外链图片转存中…(img-yUvsp4qd-1711286968582)]
[外链图片转存中…(img-ME656F8R-1711286968583)]
【Android核心高级技术PDF文档,BAT大厂面试真题解析】点击:Android架构视频+BAT面试专题PDF+学习笔记即可获取!