有两个公共接口:
在android sdk中有LayoutInflater.Factory
和LayoutInflater.Factory2
,但官方文档无法对此接口提供有用的信息,甚至是LayoutInflater
文档。
从来源我已经了解如果设置了Factory2
,那么它将被使用,否则Factory
将被使用:
View view;
if (mFactory2 != null) {
view = mFactory2.onCreateView(parent, name, context, attrs);
} else if (mFactory != null) {
view = mFactory.onCreateView(name, context, attrs);
} else {
view = null;
}
setFactory2()
也有非常简洁的文档:
/**
* Like {@link #setFactory}, but allows you to set a {@link Factory2}
* interface.
*/
public void setFactory2(Factory2 factory) {
我应该使用哪家工厂如果我想将自定义工厂设置为LayoutInflater
?
它们的区别是什么?
答案 0 :(得分:3)
唯一的区别是,在ax.get_xaxis().get_major_formatter().set_scientific(False)
中,您可以配置新视图的Factory2
将是谁。
用法 -
当您需要将特定父级设置为新视图时,请使用parent view
创建。(仅支持API 11及更高版本)
代码 - LayoutInflater来源:(删除无关代码后)
Factory2
现在public interface Factory {
// @return View Newly created view.
public View onCreateView(String name, Context context, AttributeSet attrs);
}
:
Factory2
现在您可以看到public interface Factory2 extends Factory {
// @param parent The parent that the created view will be placed in.
// @return View Newly created view.
public View onCreateView(View parent, String name, Context context, AttributeSet attrs);
}
只是Factory2
的{{1}}选项超载。
答案 1 :(得分:2)
我应该使用哪个工厂如果我想将自定义工厂设置为 LayoutInflater?它们的区别是什么?
如果您需要提供将创建视图的父级,您需要使用Factory2
。但如果您的定位API级别为11+,则通常会使用Factory2
。否则,只需使用Factory
。
以下是Factory
class MyLayoutInflaterFactory implements LayoutInflater.Factory {
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
if (TextUtils.equals(name, "MyCustomLayout")) {
return new MyCustomLayout(context, attrs);
}
// and so on...
return super.onCreateView(name, context attrs);
}
}
以下是Factory2
class MyLayoutInflaterFactory2 implements LayoutInflater.Factory2 {
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
if (TextUtils.equals(name, "MyCustomLayout")) {
return new MyCustomLayout(context, attrs);
}
// and so on...
return super.onCreateView(parent, name, context, attrs);
}
}