gravity和layout_gravity的区别
android:gravity 属性是对该view中内容的限定.
android:layout_gravity是用来设置该view相对与父view 的位置.
在代码中如何设置
android:gravity 对应的是 setGravity()
android:layout_gravity 对应的是 LayoutParam.gravity
The gravity to apply with the View to which these layout parameters
* are associated.
也就是属于 LayoutParam的作用区域(对父view)
实例:
public class TestViewActivity
extends AppCompatActivity {
@Override
protected void
onCreate(
@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
;
LinearLayout picContainer=
new LinearLayout(
this)
;
picContainer.setLayoutParams(
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.
MATCH_PARENT
, DPIUtil.
getWidthByDesignValue720(
236)))
;
picContainer.setBackgroundColor(Color.
parseColor(
"#ffffff"))
;
addView(picContainer)
;
setContentView(picContainer)
;
}
private void
addView(LinearLayout picContainer){
for (
int i=
0
;i<
3
;++i){
LinearLayout.LayoutParams picOuterParams=
new LinearLayout.LayoutParams(DPIUtil.
getWidthByDesignValue720(
236)
,DPIUtil.
getWidthByDesignValue720(
236))
;
FrameLayout.LayoutParams picParams=
new FrameLayout.LayoutParams(DPIUtil.
getWidthByDesignValue720(
210)
,DPIUtil.
getWidthByDesignValue720(
210))
;
picParams.
gravity= Gravity.
CENTER
; //设置图片居中
FrameLayout picOuter=
new FrameLayout(
this)
;
picOuter.setBackgroundColor(Color.
parseColor(
"#00ff00"))
;
//for test
if (
0==i){
picOuterParams.
leftMargin=DPIUtil.
getWidthByDesignValue720(
0)
;
}
else {
picOuterParams.
leftMargin=DPIUtil.
getWidthByDesignValue720(
6)
;
}
// picOuter.setLayoutParams(picOuterParams);
ImageView picView=
new ImageView(
this)
;
// picView.setLayoutParams(picParams);
picView.setImageResource(R.mipmap.
pic0)
;
picView.setScaleType(ImageView.ScaleType.
CENTER)
;
picOuter.addView(picView
,picParams)
;
picContainer.addView(picOuter
,picOuterParams)
;
}
}
}
注意:易错点 错误使用引用
picOuterParams 在第一个和其他商品图片处 值是不同的 第一个的左margin为0,其他的左margin为6;
此时
picOuterParams 必须写在循环体里面,否则效果如下:
private void
addView(LinearLayout picContainer){
//移到循环体外面,是一个引用,所以会被后面赋值覆盖
LinearLayout.LayoutParams picOuterParams=
new LinearLayout.LayoutParams(DPIUtil.
getWidthByDesignValue720(
236)
,DPIUtil.
getWidthByDesignValue720(
236))
;
for (
int i=
0
;i<
3
;++i){
FrameLayout.LayoutParams picParams=
new FrameLayout.LayoutParams(DPIUtil.
getWidthByDesignValue720(
210)
,DPIUtil.
getWidthByDesignValue720(
210))
;
picParams.
gravity= Gravity.
CENTER
;
FrameLayout picOuter=
new FrameLayout(
this)
;
picOuter.setBackgroundColor(Color.
parseColor(
"#00ff00"))
;
if (
0==i){
picOuterParams.
leftMargin=DPIUtil.
getWidthByDesignValue720(
0)
;
//被覆盖了
}
else {
picOuterParams.
leftMargin=DPIUtil.
getWidthByDesignValue720(
6)
;
}
ImageView picView=
new ImageView(
this)
;
picView.setImageResource(R.mipmap.
pic0)
;
picView.setScaleType(ImageView.ScaleType.
CENTER)
;
picOuter.addView(picView
,picParams)
;
picContainer.addView(picOuter
,picOuterParams)
;
}
}
效果:
可见第一项的左边也是6的边距(代码里不是设置0了吗),原因在于param用的是一个引用! 第一个商品的被后续的覆盖了。。
转载请注明原文地址: https://ju.6miu.com/read-1124640.html