自定义view的LayoutParamgravitylayout

    xiaoxiao2022-06-28  43

     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

    最新回复(0)