Android开发:如何消除HorizontalScrollView右侧的空白区域?
如何消除HorizontalScrollView右侧的空白区域?
当图片数量为5张及以上时,右侧空白区域会自动消失;仅显示2张图片时,右侧会出现明显空白。该问题在Galaxy Nexus模拟器及三星S23真机上测试结果一致,尝试在循环添加图片后为每个元素调用requestLayout(),问题仍未解决。
填充图片代码
final LinearLayout parent = activity.findViewById(R.id.detailsArticle_Photos); for (final Bitmap bitmap : bitmaps) { final CardView cardView = (CardView) LayoutInflater .from(activity) .inflate(R.layout.element_article_details_photo, parent, false); final ImageView imageView = (ImageView) cardView.findViewById(R.id.detailsArticle_MultiplePhoto); imageView.setImageBitmap(bitmap); parent.addView(cardView); }
父布局代码
<HorizontalScrollView android:id="@+id/detailsArticle_PhotosWrapper" android:layout_width="match_parent" android:layout_height="250dp" android:visibility="gone" tools:visibility="visible" android:fadeScrollbars="false" android:paddingTop="10dp" android:paddingBottom="10dp"> <LinearLayout android:id="@+id/detailsArticle_Photos" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingTop="10dp" android:layout_gravity="center" android:gravity="center" android:paddingBottom="10dp"/> </HorizontalScrollView>
子布局(element_article_details_photo)代码
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:paddingLeft="10dp" android:paddingRight="10dp" app:cardElevation="0dp" android:layout_weight="0"> <ImageView android:id="@+id/detailsArticle_MultiplePhoto" android:layout_width="wrap_content" android:minWidth="267dp" android:layout_height="match_parent" android:adjustViewBounds="true" android:scaleType="centerInside"/> </androidx.cardview.widget.CardView>
问题原因分析
核心问题出在内部LinearLayout的android:layout_width="match_parent"属性上:
- 当图片数量少、子元素总宽度未超过HorizontalScrollView的宽度时,LinearLayout会被强制拉伸到和父容器同宽,导致右侧出现空白区域
- 当图片数量足够多、子元素总宽度超过父容器宽度时,LinearLayout会自动适配内容宽度,空白区域随之消失
解决方案
修改内部LinearLayout的宽度属性,将android:layout_width="match_parent"改为android:layout_width="wrap_content",修改后的LinearLayout代码如下:
<LinearLayout android:id="@+id/detailsArticle_Photos" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingTop="10dp" android:layout_gravity="center" android:gravity="center" android:paddingBottom="10dp"/>
这样修改后,LinearLayout会根据内部图片的总宽度自适应,无论图片数量多少,HorizontalScrollView的滚动范围都会准确匹配实际内容,不会再出现右侧空白。
内容的提问来源于stack exchange,提问作者user1034461
相关产品推荐
相关产品推荐

