利用代码修改layout_marginBottom的属性

本文介绍如何在Java代码中动态修改Android布局中ListView控件与底部的距离,通过改变layout_marginBottom属性实现UI动态调整,无需重新定义布局文件。

Android开发中,可以利用xml来设置控件距离底部的尺寸,即设置layout_marginBottom的属性,那么,如何在java代码中设置这个属性呢?
这样的目的是,实现动态修改UI,而不需要重新定义布局文件。
样例如下:

首先,来看xml的定义(截取一部分):

<ListView
    android:id="@+android:id/listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginBottom="20dp"/>

再来看对应的java代码:

listview= (ListView)findViewById(R.id.listview);
RelativeLayout.LayoutParams layoutParams = (LayoutParams) listview.getLayoutParams();
layoutParams.bottomMargin=0;//将默认的距离底部20dp,改为0,这样底部区域全被listview填满。
listview.setLayoutParams(layoutParams);

这样,就实现了动态修改UI了。

<?xml version="1.0" encoding="utf-8"?> <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” android:fitsSystemWindows=“true”> <include android:id="@+id/toolbar" layout="@layout/mp_toolbar" /> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginBottom="@dimen/tpds_card_view_spacing" android:fillViewport="true" android:scrollbars="none" app:layout_constraintBottom_toTopOf="@id/btn_try_again" app:layout_constraintTop_toBottomOf="@id/toolbar"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <ImageView android:id="@+id/iv_attention" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/svg_portable_quick_setup_fail_attention" /> <TextView android:id="@+id/tv_failed_title" style="@style/Widget.TPDesign.TextView.Primary.Headline4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/tpds_card_view_spacing" android:gravity="center" android:text="@string/onboarding_portable_router_failed_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/iv_attention" /> <TextView android:id="@+id/tv_do_following" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:layout_marginTop="@dimen/tpds_card_view_spacing" android:text="@string/quicksetup_no_find_m5_do_following" android:visibility="gone" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_failed_title" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_tip1" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_all_dp_10" android:layout_marginTop="@dimen/tpds_card_view_margin_horizontal" android:layout_marginEnd="@dimen/tpds_card_view_margin_horizontal" android:importantForAccessibility="no" android:text="@string/onboarding_portable_reboot_error_tip1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/tv_failed_num1" app:layout_constraintTop_toBottomOf="@id/tv_do_following" app:layout_goneMarginTop="@dimen/tpds_all_dp_32" /> <TextView android:id="@+id/tv_failed_num1" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:background="@drawable/svg_serial_number_bg" android:gravity="center" android:importantForAccessibility="no" android:text="@string/common_number_1" app:layout_constraintDimensionRatio="1:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/tv_failed_tip1" /> <TextView android:id="@+id/tv_failed_tip2" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/tpds_card_view_margin_horizontal" android:layout_marginStart="@dimen/tpds_all_dp_10" android:layout_marginTop="@dimen/tpds_card_view_tip_spacing" android:layout_marginEnd="@dimen/tpds_card_view_margin_horizontal" android:importantForAccessibility="no" android:text="@string/onboarding_portable_reboot_error_tip2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/tv_failed_num2" app:layout_constraintTop_toBottomOf="@id/tv_failed_tip1" /> <TextView android:id="@+id/tv_failed_num2" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:background="@drawable/svg_serial_number_bg" android:gravity="center" android:importantForAccessibility="no" android:text="@string/common_number_2" app:layout_constraintDimensionRatio="1:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/tv_failed_tip2" /> <ImageView android:id="@+id/iv_error_tip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:layout_marginTop="@dimen/tpds_all_dp_40" android:layout_marginEnd="@dimen/tpds_card_view_margin_horizontal" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_failed_tip2" app:srcCompat="@drawable/svg_no_mobile_device_detected" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_tip3" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/tpds_card_view_margin_horizontal" android:layout_marginStart="@dimen/tpds_all_dp_10" android:layout_marginTop="@dimen/tpds_card_view_tip_spacing" android:layout_marginEnd="@dimen/tpds_card_view_margin_horizontal" android:importantForAccessibility="no" android:text="@string/onboarding_portable_reboot_error_tip3" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/tv_failed_num3" app:layout_constraintTop_toBottomOf="@id/tv_failed_tip2" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_num3" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:background="@drawable/svg_serial_number_bg" android:gravity="center" android:importantForAccessibility="no" android:text="@string/common_number_3" android:visibility="gone" app:layout_constraintDimensionRatio="1:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/tv_failed_tip3" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_tip4" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/tpds_card_view_margin_horizontal" android:layout_marginStart="@dimen/tpds_all_dp_10" android:layout_marginTop="@dimen/tpds_card_view_tip_spacing" android:layout_marginEnd="@dimen/tpds_card_view_margin_horizontal" android:importantForAccessibility="no" android:text="@string/onboarding_portable_reboot_error_tip3" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/tv_failed_num4" app:layout_constraintTop_toBottomOf="@id/tv_failed_tip3" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_num4" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:background="@drawable/svg_serial_number_bg" android:gravity="center" android:importantForAccessibility="no" android:text="@string/common_number_4" android:visibility="gone" app:layout_constraintDimensionRatio="1:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/tv_failed_tip4" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_tip5" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/tpds_card_view_margin_horizontal" android:layout_marginStart="@dimen/tpds_all_dp_10" android:layout_marginTop="@dimen/tpds_card_view_tip_spacing" android:layout_marginEnd="@dimen/tpds_card_view_margin_horizontal" android:importantForAccessibility="no" android:text="@string/onboarding_portable_reboot_error_tip5" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/tv_failed_num5" app:layout_constraintTop_toBottomOf="@id/tv_failed_tip4" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_num5" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:background="@drawable/svg_serial_number_bg" android:gravity="center" android:importantForAccessibility="no" android:text="@string/common_number_5" android:visibility="gone" app:layout_constraintDimensionRatio="1:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/tv_failed_tip5" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_tip6" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/tpds_card_view_margin_horizontal" android:layout_marginStart="@dimen/tpds_all_dp_10" android:layout_marginTop="@dimen/tpds_card_view_tip_spacing" android:layout_marginEnd="@dimen/tpds_card_view_margin_horizontal" android:importantForAccessibility="no" android:text="@string/quicksetup_isp_connot_find_deco_tips" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/tv_failed_num6" app:layout_constraintTop_toBottomOf="@id/tv_failed_tip5" tools:visibility="visible" /> <TextView android:id="@+id/tv_failed_num6" style="@style/Widget.TPDesign.TextView.Primary.Subtitle1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_card_view_margin_horizontal" android:background="@drawable/svg_serial_number_bg" android:gravity="center" android:importantForAccessibility="no" android:text="@string/common_number_6" android:visibility="gone" app:layout_constraintDimensionRatio="1:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/tv_failed_tip6" tools:visibility="visible" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.core.widget.NestedScrollView> <Button android:id="@+id/btn_try_again" style="?attr/materialButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/tpds_card_view_spacing" android:text="@string/dashboard_inet_status_btn_retry" android:textAllCaps="false" app:layout_goneMarginBottom="@dimen/tpds_card_view_spacing" app:layout_constraintBottom_toTopOf="@id/tv_still_having_problem" /> <TextView android:id="@+id/tv_still_having_problem" style="@style/Widget.TPDesign.TextView.Secondary.Body1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/tpds_all_dp_48" android:gravity="center_horizontal" android:text="@string/onboarding_portable_having_problem" android:textAllCaps="false" app:layout_constraintBottom_toBottomOf="parent" /> <com.tplink.design.button.TPUnderlineButton android:id="@+id/btn_contact_us" style="@style/Widget.TPDesign.Button.TextButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/tpds_all_dp_48" android:gravity="center_horizontal" android:text="@string/quicksetup_common_contact_us_problem" android:textColorHighlight="@color/transparent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> 已知tv_still_having_problem和btn_contact_us只有一个可见,修改代码让btn_try_again在其中之一的上边,且间距为tpds_card_view_spacing
最新发布
11-18
那我想问我fragment_settings.xml为啥又能避开顶上?代码如下:<?xml version="1.0" encoding="utf-8"?> <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" tools:context=".ui.settings.SettingsFragment" android:fitsSystemWindows="true" android:background="@color/surface_background"> <!-- 🔹 Material Design 按钮组 --> <Button android:id="@+id/btn_gps" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="权限设置" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginTop="56dp" /> <Button android:id="@+id/btn_apps" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="关于公交查询系统" app:layout_constraintTop_toBottomOf="@id/btn_gps" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginTop="16dp" /> <Button android:id="@+id/btn_user" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="用户调研" app:layout_constraintTop_toBottomOf="@id/btn_apps" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginTop="16dp" /> <Button android:id="@+id/btn_exit" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="退出程序" app:layout_constraintTop_toBottomOf="@id/btn_user" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:layout_marginTop="16dp" /> <!-- 🔹 图片:放在按钮下方 --> <ImageView android:id="@+id/image_bus" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="64dp" android:layout_marginBottom="64dp" android:src="@drawable/bus" app:layout_constraintBottom_toTopOf="@+id/text_settings" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/btn_exit" /> <!-- 🔹 底部 TextView --> <TextView android:id="@+id/text_settings" android:text="Bus-1.0" android:textColor="#777777" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:textAlignment="center" android:textSize="11sp" app:layout_constraintTop_toBottomOf="@id/image_bus" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> 如果可以的话我更希望能按照这种避开形式
11-07
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/toolbar" layout="@layout/mp_toolbar" /> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginTop="@dimen/tpds_card_view_spacing" android:layout_marginBottom="@dimen/tpds_card_view_spacing" android:fillViewport="true" android:scrollbars="none" app:layout_constraintBottom_toTopOf="@id/send_message_btn" app:layout_constraintTop_toBottomOf="@id/toolbar"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/cl_content" android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/setting_item_list" android:layout_width="match_parent" android:layout_height="0dp" android:scrollbars="none" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/usage_alert_tips_tv" style="@style/Widget.TPDesign.TextView.Secondary.Body1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/tpds_list_item_spacing_horizontal" android:layout_marginTop="@dimen/tpds_all_dp_10" android:layout_marginEnd="@dimen/tpds_list_item_spacing_horizontal" android:text="@string/data_setting_sms_alert_tips" app:layout_constraintTop_toBottomOf="@id/setting_item_list" /> <com.tplink.design.card.TPConstraintCardView android:id="@+id/card_threshold" style="?attr/materialCardViewStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/tpds_all_dp_16" app:layout_constraintTop_toBottomOf="@+id/usage_alert_tips_tv"> <com.tplink.design.list.TPTwoLineItemView android:id="@+id/line2_data_percentage" android:layout_width="match_parent" android:layout_height="wrap_content" app:itemContent="@string/common_percent_float" app:itemDivider="false" app:itemEndIcon="@drawable/mp_svg_arrow_end" app:itemTitle="@string/advanced_data_setting_usage_alert_data_percentage" /> </com.tplink.design.card.TPConstraintCardView> <com.tplink.design.card.TPConstraintCardView android:id="@+id/card_phone" style="?attr/materialCardViewStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/tpds_divider_block_thickness" app:contentPaddingBottom="@dimen/tpds_all_dp_10" app:layout_constraintTop_toBottomOf="@+id/card_threshold"> <com.tplink.design.text.TPTextField android:id="@+id/tf_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/advanced_data_setting_usage_alert_phone_number" android:imeOptions="actionDone" android:inputType="phone" android:maxLength="21" app:endIconMode="clear_text" app:errorHideAuto="true" app:helperText="@string/advanced_data_setting_usage_alert_phone_tips_mercusys" /> </com.tplink.design.card.TPConstraintCardView> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.core.widget.NestedScrollView> <Button android:id="@+id/send_message_btn" style="@style/Widget.TPDesign.Button.OutlinedButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/tpds_all_dp_44" android:text="@string/advanced_data_setting_usage_sms_send_test" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> 想要setting_item_list隐藏时,usage_alert_tips_tv距离顶部约束布局的距离为0
10-18
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值