Android ListView宽度不断变化

时间:2017-07-07 12:47:07

标签: android xml listview width

首先,我是android的新手,所以如果我错过了一些基本的东西,我道歉。

我有一个页面,它有两个并排的ListView,两者都有不同的内容。我还在ListViews上面有一个TextView,在listviews下面有另一个TextView。这些文本视图框根据在两个ListView中选择的项目进行更改。

这两个ListView并排放置,每个占据屏幕的一半,而Textview位于正上方和正下方,两者都以页面为中心。图像如下所示。

This is the page looking normal on load.

问题是当我从任一列表中选择一个项目时。我有一种感觉,我缺少一些XML属性,但我不确定哪些属性或甚至是这种情况。当选择一个项目时,让我们从右侧的ListView中说,底部的TextView将使用从数组中获取的文本进行更新。 ListView也决定改变宽度,我不知道为什么这是....我不希望ListView改变宽度。我希望它只占用页面的一半和页面的一半。

This is the page after an item from the right ListView has been selected.

我还想把事情保存在RelativeLayout中。我也相信它只是一个XML问题而不是与适配器或任何其他代码有关,因此我暂时不会包含它。如果需要,我可以加入。

任何帮助都会很棒。提前谢谢。

content_titles.xml 我的活动xml文件

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TitlesActivity">

<ListView
    android:id="@+id/unlocked_titles_list"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:longClickable="true"
    android:layout_below="@+id/current_title"
    android:layout_alignEnd="@+id/requirements"
    android:layout_marginEnd="26dp"
    android:layout_above="@+id/requirements">
</ListView>

<TextView
    android:id="@+id/current_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="65dp"
    android:text="Current Title: Novice"
    android:textSize="24sp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"/>

<ListView
    android:id="@+id/locked_titles_list"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_alignStart="@+id/requirements"
    android:layout_marginStart="28dp"
    android:layout_above="@+id/requirements"
    android:layout_below="@+id/current_title"/>

<TextView
    android:id="@+id/requirements"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="34dp"
    android:text="temp"
    android:textAlignment="center"
    android:textSize="24sp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"/>

</RelativeLayout>

activity_listview.xml 用作ListViews的各行

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/label"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:padding="10dip"
      android:textSize="16dip"
      android:textStyle="bold" >
</TextView>

2 个答案:

答案 0 :(得分:4)

布局问题可能是由ScrollView作为包装器引起的

我偶然发现了http://developer.android.com/reference/android/widget/ExpandableListView.html

中的一些说明

&#34; ...注意:如果父级的大小也没有严格指定(例如,如果父级的大小不同),则不能将值wrap_content用于XML中的ExpandableListView的android:layout_height属性。 ScrollView你无法指定wrap_content,因为它也可以是任何长度。但是,如果ExpandableListView父级具有特定大小(例如100像素),则可以使用wrap_content。&#34;

我删除了包装ScrollView并且线性布局开始正常工作。现在只知道如何将东西包装到ScrollView。上帝帮助我

但无论如何这是非常奇怪的行为。我认为fill_parent的措辞不是很正确。使用heirarchyviewer工具时,我总是看到layout_width和leayout_height的WRAP_CONTENT和MATCH_PARENT值。所以fill_parent实际上可能意味着match_parent,这让我陷入了认知失调。

答案 1 :(得分:0)

您已将layout_width属性设置为wrap_content。这意味着它们可以随着数据的变化而变化。我建议您将ListView放入LinearLayout orientation:horizontal,并设置每个元素占用layout_weight的空间量。这是一个相关的SO问题What does android:layout_weight mean?