java - ListView 的大小或位置不符合我的预期

标签 java android listview dialog scrollview

![在此处输入图像描述][1]我在对话框中有一个 ListView 和一个 ScrollView。我希望 ListView 和 ScrollView 填满对话框的一半。我似乎只能通过将 ScrollView 中的 EditText 的宽度设置为 160dp 来实现这一点。在没有特定 dp 的情况下是否有办法做到这一点?

下面的代码会发生什么:

https://drive.google.com/file/d/0Bxf-D6ENUTuAU21wclVpWkJUdTg/edit?usp=sharing

这是 ScrollView:search.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:id="@+id/search_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:singleLine="true"
        />

        <TextView
            android:id="@+id/primary_role"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="10dp"
            android:text="Primary Role"
            android:textSize="18sp"
        />

        <CheckBox
            android:id="@+id/primary_assassin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Assassin"
        />

        <CheckBox
            android:id="@+id/primary_fighter"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Fighter"
        />

        <CheckBox
            android:id="@+id/primary_jungle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Jungler"
        />

        <CheckBox
            android:id="@+id/primary_mage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Mage"
        />

        <CheckBox
            android:id="@+id/primary_marksman"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Marksman"
        />

        <CheckBox
            android:id="@+id/primary_support"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Support"
        />

        <CheckBox
            android:id="@+id/primary_tank"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Tank"
        />

        <TextView
            android:id="@+id/secondary_role"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="10dp"
            android:text="Secondary Role"
            android:textSize="18sp"
        />

        <CheckBox
            android:id="@+id/secondary_assassin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Assassin"
        />    

        <CheckBox
            android:id="@+id/secondary_fighter"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Fighter"
        />

        <CheckBox
            android:id="@+id/secondary_jungle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Jungler"
        />

        <CheckBox
            android:id="@+id/secondary_mage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Mage"
        />

        <CheckBox
            android:id="@+id/secondary_marksman"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Marksman"
        />

        <CheckBox
            android:id="@+id/secondary_support"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Support"
        />

        <CheckBox
            android:id="@+id/secondary_tank"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="25dp"
            android:text="Tank"
        />

    </LinearLayout>

</ScrollView>

这是我制作的自定义列表项:list_item.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/iv"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_alignParentLeft="true"
        android:src="@drawable/ic_launcher"
    />

    <TextView
        android:id="@+id/tv"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_toRightOf="@id/iv"
        android:layout_centerVertical="true"
        android:singleLine="true"
        android:textSize="18sp"
    />

</RelativeLayout>

这是我的对话框用来显示的 xml:listview.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center">

    <include
        layout="@layout/search"
        android:id="@+id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
    />

    <ListView
        android:id="@+id/list"
        android:layout_toRightOf="@id/search"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />

</RelativeLayout>

这是我的 mainActivity.java 文件

String[] example = {"example1", "example2", "example3"};

final Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.listView);

dialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

final ListView list_view = (ListView)dialog.findViewById(R.id.list);
final ArrayAdapter<String> list_array_adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.list_item, R.id.iv, example);
list_view.setAdapter(list_array_adapter);

list_view.setOnItemClickListener(new OnItemClickListener() 
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
    {
        // ListView Clicked item index
        int itemPosition = position;
        // ListView Clicked item value
        String itemValue = (String) list_view.getItemAtPosition(position);
        // Show Alert 
        Toast.makeText(getApplicationContext(),"Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG).show();
    }
});

这就是我使用以下代码时发生的情况:

https://drive.google.com/file/d/0Bxf-D6ENUTuASE1KSmFZZDNkams/edit?usp=sharing

这就是我想要的,而无需在 EditText 下使用 android:layout_width = "160dp"

两张图片之间唯一的区别是第二张图片中 EditText 的宽度为 160dp。

最佳答案

我不太确定您要做什么,但我认为您可能希望在 RelativeLayout 中包含这两个 View ,您可以通过将其中一个声明为 android:layout_toRightOf 另一个来声明它们应该并排渲染。也就是说,将 android:layout_toRightOf="@+id/ScrollView" 行添加到 ListView 的 XML 中。

关于java - ListView 的大小或位置不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22240201/

相关文章:

android - 支付失败 "The merchant does not accept payments of this type"

android - 从 JSON 结果中选择每条记录,然后将其添加到 listview,Android

java - 在java youtube api v3中获取youtube视频基本信息?

java - 如何用多行替换 PDF 中的文本?

java - 如何在 OpenGL 中移动相机

java - 如果加载时间太长,如何让 selenium 重新加载所需的 url

android - 如何使用 Parse 避免安装重复?

java - 如何读取 json 文件,并使用 GSON 将其转换为 POJO

android - Android ListView 的无限适配器

java - javafx 中代码区域的自动补全