Android布局如何让居父布局末尾的图标左侧EditText填充剩余宽度
解决方案
以下两种实现方案均不需要使用layout_weight属性,可直接满足需求:
1. 基于现有RelativeLayout修改
你当前代码不生效的核心原因是EditText没有设置右侧边界约束,默认会占满整个父布局宽度,会被ImageButton遮挡。仅需要给EditText增加layout_toStartOf属性绑定到ImageButton即可:
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/et_categories_search" style="@style/loginEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/login_edittext_bg" android:padding="@dimen/large_spacer" android:layout_toStartOf="@id/ib_search" /> <ImageButton android:id="@+id/ib_search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:clickable="true" android:padding="@dimen/small_spacer" android:src="@drawable/search_icon" /> </RelativeLayout>
修改后EditText的右边界会自动对齐ImageButton的左边界,自动填充ImageButton左侧全部剩余空间,ImageButton保持对齐父布局末尾的逻辑不变。
2. ConstraintLayout实现(官方推荐方案)
如果切换为性能更优的ConstraintLayout,通过约束规则也可实现同等效果:
<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/et_categories_search" style="@style/loginEditText" android:layout_width="0dp" android:layout_height="wrap_content" android:background="@drawable/login_edittext_bg" android:padding="@dimen/large_spacer" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/ib_search" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> <ImageButton android:id="@+id/ib_search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:padding="@dimen/small_spacer" android:src="@drawable/search_icon" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
将EditText宽度设为0dp后,通过横向边界约束即可自动填充ImageButton左侧的全部剩余空间。
内容的提问来源于stack exchange,提问作者Abd Maj
相关产品推荐
相关产品推荐

