listView项与父n线性布局不匹配

时间:2016-04-26 12:06:06

标签: android listview

我需要创建具有ListView的LinearLayout。我用这段代码做了:

this.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    final ListView listView = (ListView) LayoutInflater.from(getContext()).inflate(R.layout.chat_timer_rollout, null);
    addView(listView);

我的聊天计时器推出是:

<ListView
xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="match_parent"
a:layout_height="wrap_content"
a:background="@color/white"
a:cacheColorHint="@color/white"
a:paddingBottom="12dp"
a:paddingTop="12dp">

创建后,我尝试在列表视图中添加项目,如下所示:

final ArrayAdapter<TimeInterval> adapter = new ArrayAdapter<>(getContext(),
                                                                R.layout.chat_timer_item,
                                                                R.id.timer_label, TimeInterval.INTERVALS);

    listView.setAdapter(adapter);

聊天计时器项目包含代码:

<TextView
a:id="@+id/timer_label"
xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="match_parent"
a:layout_height="wrap_content"
a:paddingBottom="11dp"
a:paddingLeft="@dimen/timer_label_margin_right"
a:paddingTop="11dp"
a:textColor="@color/primary_text"
a:textSize="@dimen/timer_text_size"/>

创建后我在屏幕上看到我的线性布局,但是当我点击项目时它有宽度wrap_content,不匹配父级?怎么解决?我试图为params match_parent充气设置一个更多的线性布局,但它没有帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

LayoutInflater#inflate()方法中的第二个参数是膨胀布局的(可选)父View。当您为父级传递null时,Inflater不知道哪种类型的LayoutParams是合适的,因此它使用默认ViewGroup.LayoutParams,其中ViewGroup.WRAP_CONTENTLinearLayout两个方面。

由于您发布的代码位于this子类中,因此您可以将inflate()作为View调用中的第二个参数传递。此外,当您使用双参数方法提供父addView()时,会自动将夸大的布局添加到其中,因此您不需要final ListView listView = (ListView) LayoutInflater.from(getContext()) .inflate(R.layout.chat_timer_rollout, this); 来电。

[DisplayFormat()]