如何确保Android adView始终显示在我的Android listView中最后一个项目的底部之后?

roejwanj  于 2023-02-14  发布在  Android
关注(0)|答案(1)|浏览(148)
    • bounty将在5天后过期**。回答此问题可获得+50的声望奖励。Zac1正在寻找规范答案:请提供有效的XML布局代码来解决此问题。如果我在Android Studio Design编辑器中调整listView的大小,使listView位于adView上方,adView似乎仍会与listView的最后一项重叠。

下面是activity_results XML布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    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.test.test.ResultsActivity">

    <androidx.coordinatorlayout.widget.CoordinatorLayout 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">

        <com.google.android.material.appbar.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay"
                app:titleTextAppearance="@style/ToolbarTitle" />

            <com.google.android.material.tabs.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_gravity="center_horizontal"
                app:tabMaxWidth="0dp">

                <com.google.android.material.tabs.TabItem
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/tab_text_1" />

                <com.google.android.material.tabs.TabItem
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/tab_text_2" />
            </com.google.android.material.tabs.TabLayout>

        </com.google.android.material.appbar.AppBarLayout>

        <androidx.viewpager.widget.ViewPager
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        <androidx.constraintlayout.widget.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"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            tools:context="com.test.test.ResultsActivity">

            <ListView
                android:id="@+id/listView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toTopOf="@+id/adView"></ListView>

            <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
                android:id="@+id/adView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_gravity="center|bottom"
                ads:adSize="SMART_BANNER"
                ads:adUnitId="@string/banner_ad_unit_id"
                app:layout_constraintBottom_toBottomOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>

</RelativeLayout>

下面是content_results.xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="@dimen/activity_horizontal_margin">

    <TextView
        android:id="@+id/abc"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="10dip"
        android:textColor="@color/colorAccent"
        android:textSize="14sp"
        android:textStyle="bold" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/def"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textColor="@color/colorPrimary"
            android:textSize="14sp"
            android:textStyle="bold" />
    </RelativeLayout>

    <TextView
        android:id="@+id/ghi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textColor="@color/colorPrimary"
        android:textSize="14sp"
        android:textStyle="bold" />
</LinearLayout>

我想把adView项放在listView最后一个元素的底部。这在我现有的布局中可行吗?因为看起来activity_results中的adViewcontent_results文件中的列表项没有关系?
我还尝试过使用app:layout_constraintBottom_toTopOf属性将adView定位在ListView下面,但似乎没有任何变化。
请让我知道,如果你能抓住任何其他基本错误,在这些布局?

exdqitrt

exdqitrt1#

我有两条建议给你:
1.避免使用ListView(除非你有固定数量的项目和很少的项目)。首选RecyclerView,因为它更具表现力。基本上,如果你有很多项目,使用RecyclerView,只有一定数量的项目会呈现布局。使用ListView,即使是第一百个项目也会呈现布局(即使你在某个时刻只能看到屏幕上的前四个项目)。
1.请注意使用多个嵌套视图组。这会影响在设备上呈现布局的性能。通常,只有根ConstraintLayout才能解决对齐元素时可能遇到的所有问题。对于第一个布局,由于AppBarLayout需要CoordinatorLayout才能正常工作,因此可以将CoordinatorLayout保留为根,并在AppBarLayout之后使用ConstraintLayout。对于第二个布局,同样的事情。这里有一个例子:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:padding="10dp">

    <TextView
        android:id="@+id/abc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        android:paddingBottom="10dp"
        android:textColor="@color/design_default_color_primary"
        android:textSize="14sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/def"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/abc"
        android:textColor="@color/design_default_color_primary"
        android:textSize="14sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/ghi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/def"
        android:text=""
        android:textColor="@color/design_default_color_primary"
        android:textSize="14sp"
        android:textStyle="bold" />
</androidx.constraintlayout.widget.ConstraintLayout>

关于您在AdView职位上遇到的问题,请尝试以下方法:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:padding="10dp">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        tools:itemCount="@integer/material_motion_duration_long_2"
        tools:layout_editor_absoluteX="3dp" />

    <com.google.android.gms.ads.AdView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/recyclerview"/>

</androidx.constraintlayout.widget.ConstraintLayout>

如果成功了就告诉我。如果你需要更多帮助,联系我。

相关问题