活动

时间:2015-10-23 07:46:38

标签: android android-activity layout-inflater

我需要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);
    }
}

}

4 个答案:

答案 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)。