setContentView
和LayoutInflater
之间有什么区别?
我们在自定义inflater
的自定义toast
和setContentView
中使用alertbox
的原因是什么?
答案 0 :(得分:17)
之前你需要了解一些事情,
在Android
中,每个Activity
都附加一个ViewRoot
,通常还有一个Window
。但是,SurfaceView
有自己的窗口。因此,如果Activity
有一个SurfaceView
,它将拥有多个窗口。
此活动用于占据整个窗口的屏幕显示。视图附加到此窗口。每个窗口都有一个Surface和Surface使用Canvas
在表面上绘制。视图附加的窗口拥有表面。
基本上ViewRoot
负责收集和分发输入,View
负责管理焦点/关键事件,Canvas
仅负责"绘图"使用onDraw()
进行操作。
setContentView(View)
是一种专用于Activity
的方法。在内部,它会调用setContentView(View)
的{{1}}。此方法将活动内容设置为显式视图。此视图直接放在活动的视图层次结构中。调用此功能"锁定"从这一点开始,不能改变窗口的各种特性。因此它只被调用一次。
Window
用于将布局XML文件实例化为其对应的View对象。基本上,目的是根据需要在运行时创建视图对象。
最好的示例是LayoutInflater
,如AdapterViews
,ListView
等,其中根据记录数在运行时创建与单个记录对应的单个视图对象。
在Spinner
的情况下,如果要动态更改子视图,则使用Toast
,例如。在运行时更改图像。如果不对子视图进行任何更改,那么简单地LayoutInflater
toast就足以设置toast的布局视图。
如果您仔细观察,setView(View)
与Toast
相同。
希望它对你有所帮助。
答案 1 :(得分:2)
setContentView在内部使用Inflater来实现它的功能。这是一种便捷方法,它负责为要膨胀的布局分配父/根视图元素。它还初始化了ActionBar。
这是Android源代码: Activity.java
public void setContentView(int layoutResID) {
getWindow().setContentView(layoutResID);
initActionBar();
}
COM /机器人/内部/策略/ IMPL / PhoneWindow.java
@Override
public void setContentView(int layoutResID) {
if (mContentParent == null) {
installDecor();
} else {
mContentParent.removeAllViews();
}
mLayoutInflater.inflate(layoutResID, mContentParent);
final Callback cb = getCallback();
if (cb != null && !isDestroyed()) {
cb.onContentChanged();
}
}
关于您的第二个问题,我们在自定义Toast和自定义警报对话框中都使用了inflater。 例如自定义Toast创建:
Toast toast = new Toast(getApplicationContext());
toast.setView(inflater.inflate(R.layout.custom_toast,
(ViewGroup) findViewById(R.id.toast_layout_root)));
e.g。自定义警报对话框创建:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(inflater.inflate(R.layout.dialog_signin, null));
如果是警报对话框,我们不会为膨胀的布局提供根目录,因为布局会添加到带有ID' custom'的FrameLayout元素中。在alert_dialog.xml
中指定答案 2 :(得分:1)
setContentView ()
通常用于加载活动。 inflate
只有Layout形成了一个视图类对象,如有必要,还会形成setContentView(view)。
显示了通过setContentView (
)界面的常规活动,但如何控制布局设置为在非活动中运行,这需要LayoutInflater
动态加载。例如,当您使用适配器类进行微调器时,您可能必须使用LayoutInflater
。
答案 3 :(得分:1)
setContentView():此方法设置背景布局。
LoayoutInflater:假设您使用listview并且您的需要显示列表10 item.then layoutIflat为show 10 item工作
inflater:这需要你的设计,保持价值 layoutInflat
自定义Toast:这是你的字符串output.custom toast意味着你希望设计output.stylist输出显示。
抱歉兄弟我也不知道alertbox。谢谢你变化很多