我需要LayoutInflater的帮助。
在我的项目中,我得到了"避免传递null
作为视图根(需要解析布局参数......" lint警告。
在OnCreate方法中,此警告来自Activity,我有类似这样的内容:
LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.my_view, null);
例如,用于膨胀标题。
我知道当我在Fragment或Adapter中使用LayoutInflater时我有ViewGroup对象而且我可以将它传递给null但是在这种情况下我应该怎么做它在Activity中?我应该抑制此警告并传递null或以某种方式创建父对象吗?
修改
public void addTextField(String message, int textSize) {
LinearLayout field = (LinearLayout) getLayoutInflater().inflate(R.layout.text_view_field, null);
TextView textView = (TextView) field.findViewById(R.id.taroTextView);
textView.setText(message);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
textView.setSingleLine(false);
mFieldsLayout.addView(field, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
}
或:
public class MyActionBarActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
LayoutInflater inflater = LayoutInflater.from(this);
View customView = inflater.inflate(R.layout.action_bar_layout, null);
actionBar.setCustomView(customView);
actionBar.setDisplayShowCustomEnabled(true);
}
}
}
答案 0 :(得分:3)
为什么不直接在活动中致电getLayoutInflater()
?
如下:
View view = getLayoutInflater().inflate(R.layout.my_view, null);
null
参数不存在问题。它在我的活动中运作良好。
答案 1 :(得分:3)
您应该传递包含视图的父级。
E.g:
ViewGroup container = (ViewGroup) findViewById(R.id.header_container);
View view = getLayoutInflater().inflate(R.layout.my_view, container, false);
container.addView(view);
这只是必要的,因此您正在膨胀的视图会保留其与父项相关的属性,例如边距。如果您通过null
,则会将其设置为默认值。
答案 2 :(得分:1)
这只是一个警告。你有时需要传递null。如果它是故意的,它没有错。 android框架中的许多小部件也是这样做的。
如果您想要取消警告,请使用以下命令:
@SuppressLint("InflateParams")
在你的陈述/方法或类上。
例如:
@SuppressLint("InflateParams")
View view = inflater.inflate(R.layout.my_view, null);
或
@SuppressLint("InflateParams")
void yourMethod(){
LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.my_view, null);
}
确保你在这里做的是对的。警告仅供您检查代码的正确性。
答案 3 :(得分:0)
此解决方案对我有用:
View view = inflater.inflate(R.layout.my_view, (ViewGroup) getWindow().getDecorView(), false);
这样,您的视图便具有一个未附加其根的根(DecorView)。