Greetings Stack Overflow社区
创建自定义Toast android developer guide以及此stack overflow post时,都提供以下示例:
my_custom_toast.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_container"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView android:src="@drawable/droid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
MainActivity.java
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(
R.layout.my_custom_toast,
(ViewGroup) findViewById(R.id.toast_container)
);
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("This is a custom toast");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
一些笔记
如果第二个参数为null,则inflate()
应该返回xml文件的根,即名为toast_container
的LinearLayout。
否则,如果ViewGroup作为第二个参数传递,那么inflate()
应该将膨胀的层次结构附加到此ViewGroup并返回提供的ViewGroup(现在是膨胀布局的父级)。
我有两个问题:
首先
提供第二个参数的目的是什么?默认情况下,如果我们传递null,将返回标识为@+id/toast_container
的LinearLayout。
第二
如何将膨胀的层次结构夸大(和嵌入)给自己的一个成员?或者,上面使用的inflate()被认为是不合适的吗?
换句话说,此代码将布局膨胀(并嵌入)到其自己的成员之一,即LinearLayout(check @+id/toast_container
)。
这通过将xml文件膨胀为第二个LinearLayout来复制LinearLayout。
答案 0 :(得分:0)
回答你的第一个问题,视图的膨胀将使用第二个参数,以便正确地执行几个步骤。主要与LayoutParams类有关(许多视图类都有一个对应的LayoutParams类)。如果您尝试使用边距,这些可能仅在您传递第二个参数时才有效。
问题2:您误解了文档。如果你传递第二个参数ViewGroup,我称之为'parent',你的布局将被夸大为'parent',函数返回'parent'。
如果您没有传递第二个参数,该函数会使您的布局膨胀并返回布局本身(根/顶视图)。