自定义列表查看特定屏幕高度

时间:2017-12-09 17:13:53

标签: android listview

我编写了一个应用程序来了解自定义列表视图。虽然应用程序没有错误,但我有一个问题。我在图像中显示如下。 IMAGE 1 IMAGE 2

问题是我必须滚动很长时间才能找到下一个列表项。列表项不会出现在另一个下面。如何解决此问题? 这是我的代码:

package com.example.hp.customlistview;

import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    int IMAGES[]={R.drawable.adsense, R.drawable.allo, R.drawable.chrome, R.drawable.firebase, R.drawable.youtube};
    String[] NAMES={"AdSense","Allo","Chrome","Firebase","YouTube"};
    String [] DESCRIPTIONS={"Money through ads","Video calling","Web Browser","Cloud Database","Video Streaming"};
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView=(ListView)findViewById(R.id.listView);
        CustomAdapter customAdapter=new CustomAdapter();
        listView.setAdapter(customAdapter);
    }

    class CustomAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            Log.d("Length of Array ","The length is "+IMAGES.length);
            return IMAGES.length;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            LayoutInflater layoutInflater=(LayoutInflater)getApplicationContext().getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);
            view=layoutInflater.inflate(R.layout.customlayout, null);
            Log.d("Image ID","The id is "+R.id.imageView);
            ImageView imageView=(ImageView)view.findViewById(R.id.imageView);
            TextView textView_name=(TextView)view.findViewById(R.id.textView);
            TextView textView_desc=(TextView)view.findViewById(R.id.textView2);
            if(imageView==null)
                Log.d("NULL?","YES IT IS NULL");
            else
                Log.d("NULL?","NO IT IS NOT NULL");
            imageView.setImageResource(IMAGES[i]);
            textView_name.setText(NAMES[i]);
            textView_desc.setText(DESCRIPTIONS[i]);
            Log.d("Hello","Hello there "+textView_name.getText().toString());
            return view;
        }
    }
}

customlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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="120dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="86dp"
        android:layout_height="91dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0"
        app:srcCompat="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="161dp"
        android:layout_height="39dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="28dp"
        android:layout_marginTop="24dp"
        app:layout_constraintBottom_toTopOf="@+id/textView2"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="237dp"
        android:layout_height="57dp"
        android:layout_marginBottom="380dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="44dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toEndOf="@+id/imageView" />

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="39dp"
        android:layout_height="39dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="com.example.hp.customlistview.MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="386dp"
        android:layout_height="409dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="Ok"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/listView" />
</android.support.constraint.ConstraintLayout>

要解决此问题,我尝试了以下

1)android:layout_height =“match_parent”到120 dp的特定高度。 (它在customlayout.xml中) 但它不起作用

2)使用其他一些布局,例如绝对和相对布局,但图像填充列表内容远远超出预期的大小

编辑: 我以紧凑的方式显示列表项,如下所示, 之后Ben P.在下面的评论中提出了建议。 IMAGE 3 但是描述没有出现,尽管我已经在MainActivity.java中以编程方式设置了它 我观察到将android:layout_height设置为某个自定义值会使描述文本视图在预览中消失。

如果有人正在贬低,请说明理由。这将有助于我提高问题的质量。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。将它发布给将来可能有类似疑虑的任何人。 即使在拖放项目之前,也要将布局高度设置为120dp或某些有限值。 现在开始在这种缩小的布局上进行拖放操作。 我觉得很简单。这帮我解决了。 这是:)

Image 5