Android 设置Padding和Margin(动态/静态)
Posted &岁月不待人&
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 设置Padding和Margin(动态/静态)相关的知识,希望对你有一定的参考价值。
一、什么是padding,什么是margin?
在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
Android之android:padding和android:layout_margin的区别
android:padding和android:layout_margin
android:layout_margin就是设置view的上下左右边框的额外空间
android:padding是设置内容相对view的边框的距离
在LinearLayout、RelativeLayout、TableLayout中,这2个属性都是设置都是有效的
在FrameLayout中,android:layout_margin是无效的,因为FrameLayout里面的元素都是从左上角开始绘制的
在AbsoluteLayout中,没有android:layout_margin属性
padding是站在父view的角度描述问题 [ ?p?d?? ]
它规定它里面的内容必须与这个父view边界的距离。
margin则是站在自己的角度描述问题 [?mɑ:d??n]
规定自己和其他(上下左右)的view 大专栏 Android之android:padding和android:layout_margin的区别之间的距离,如果同一级只有一个view,那么它的效果基本上就和padding一样了
gravity
属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.该属性就干了这个.
layout_gravity
是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左, 靠右等位置就可以通过该属性设置.
这样就解释了,有什么我们弄个最外布局,然后里面包了几个布局,如果要使这几个布局都靠底
就可以在最外布局的属性里设置gravity=”botton” 因为gravity是对里面的内容起作用.
以上是关于Android 设置Padding和Margin(动态/静态)的主要内容,如果未能解决你的问题,请参考以下文章
android:padding和android:margin的区别
android:drawableLeft margin 和/或 padding