ListView跨多个分辨率缩放



Pixel 2 XL vs Nexus 5x

我正试图在多个分辨率之间扩展我的自定义ListView,但我遇到了这个问题:我在Pixel 2 XL上有额外的空白空间,这是一个1440p的设备,但在Nexus 5X上看起来很好,它是一个1080p的设备。

附件是Fragment和ListView的XML代码。我在片段上使用ConstraintLayout,在ListView上使用RelativeLayout。我曾尝试为ListView使用ConstraintLayout,但在将第二个文本视图锚定到右侧时遇到了问题。

ListView 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:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="68dp"
android:layout_height="wrap_content"
android:gravity="start"
android:text="TextView"
android:textSize="18sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="310dp"
android:layout_marginTop="0dp"
android:gravity="end"
android:text="TextView"
android:textSize="18sp" />
</RelativeLayout>

片段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:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LeaderboardFrag">
<!-- TODO: Update blank fragment layout -->

<ListView
android:id="@+id/leaderboardListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</android.support.constraint.ConstraintLayout>

设置

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

将始终将您的ListView放在中心位置。尝试删除

app:layout_constraintBottom_toBottomOf="parent"

进行以下更改

列表视图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:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="68dp"
android:layout_height="wrap_content"
android:gravity="start"
android:text="TextView"
android:textSize="18sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="310dp"
android:layout_marginTop="0dp"
android:gravity="end"
android:text="TextView"
android:textSize="18sp" />
</RelativeLayout>

片段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:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="your_color"
tools:context=".LeaderboardFrag">
<!-- TODO: Update blank fragment layout -->

<ListView
android:id="@+id/leaderboardListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</android.support.constraint.ConstraintLayout>

约束布局不支持match_parent,因此您可以执行以下操作

<?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:id="@+id/frameLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LeaderboardFrag">
<!-- TODO: Update blank fragment layout -->

<ListView
android:id="@+id/leaderboardListView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>

将值设置为0dp将允许您的布局与所提供的约束相匹配。此外,这是您的选择,但使用RecyclerView比使用ListView更好。

最新更新