赞
踩
在Android界面开发时,为了布局更加合理好看,很多时候会用上Padding和Margin,
padding和margin是什么呢?即内边距和外边距;
某个View指定为padding是针对该View里面的子View距离该View距离而言的,或者是里面的内容距离容器的距离。
某个View指定为margin是针对该View本身距离别人或者父View而言的。
例如下图,输入框里面的文字内容,如果不设置内边距,那么就会紧挨左上角,这样看起来,就很不友好,合理的设置padding看起来会舒服很多。
如果,不设置外边距,会充满整个父布局,也不好看,这时候就需要margin属性(外边距)。
类似于控件的基础属性,并且不会变化的,我们一般会直接在xml文件里直接设置,这是上图的布局代码
- <androidx.appcompat.widget.AppCompatEditText
- android:id="@+id/chat_input_edit"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginStart="10dp"
- android:layout_marginTop="10dp"
- android:layout_marginEnd="10dp"
- android:layout_marginBottom="10dp"
- android:paddingHorizontal="12dp"
- android:paddingVertical="10dp"
- android:textColor="@color/white"
- android:textColorHint="#94ffffff"
- android:textSize="14sp" />
那么怎么动态设置padding和margin呢?其实也很简单。
1.设置padding
view.setPadding(int left, int top, int right, int bottom)//view为你要设置的控件
例子:在我点击搜索框后,搜索框获取焦点,准备输入内容的时候,图标消失,文本内边距修改,实现代码如下
- editText.setOnFocusChangeListener { view, b ->
- if (b) {//使用dp2px方法进行屏幕适配
- view.setPadding(DPUtils.dp2px(12f),DPUtils.dp2px(6f),DPUtils.dp2px(12f),DPUtils.dp2px(6f))
- searchIcon.visibility = View.GONE
- }
- }
实现效果:最开始文本里左边内边距32dp,点击后变成12dp
- //这是dp转为px的方法
- private fun dp2px(i: Int): Int {
- return (Resources.getSystem().displayMetrics.density * i + 0.5f).toInt()}
为什么会有dp2px这个方法来转一下呢?
android的view中有setPadding,但是没有直接的setMargin方法。如果要在代码中设置该怎么做呢?可以通过设置view里面的 LayoutParams 设置,而这个LayoutParams是根据该view在不同的GroupView而不同的。这儿用的是RelativeLayout是因为在他的父布局是RelativeLayout哦,用成其他的会报错哦~~
- val lp = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT)
- lp.setMargins(0, 0, DPUtils.dp2px(7f), DPUtils.dp2px(7f))
- //RelativeLayout可以通过LayoutParams的addRule来添加约束,其他的布局也有类似的一些方法
- lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
- lp.addRule(RelativeLayout.ALIGN_PARENT_END)
- textView.layoutParams = lp
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。