使用代码构建布局及设置常用属性

来源:互联网 发布:淘宝联盟提现的日期 编辑:程序博客网 时间:2024/05/29 18:07

        很多时候,由于项目的原因,我们必须要通过代码来构建布局。而很多控件的属性,在用代码构建的时候,一般不是很方便。所以为了日后方便复习,特来把代码写过的布局整理一下以供参考。

        先来看一个布局:     

                RelativeLayout relativeLayout=new RelativeLayout(getActivity());                ViewGroup.MarginLayoutParams layoutParams=new ViewGroup.MarginLayoutParams(ViewGroup.MarginLayoutParams.WRAP_CONTENT,                        ViewGroup.LayoutParams.MATCH_PARENT);                relativeLayout.setLayoutParams(layoutParams);                relativeLayout.setGravity(Gravity.CENTER);                TextView textView=new TextView(getActivity());                ViewGroup.MarginLayoutParams params;                String TagName=skinCardTagOption.getTagName();                if(TagName.length()<=4)                {                    params=new ViewGroup.MarginLayoutParams(DipUtil.dip2px(getActivity(),70),DipUtil.dip2px(getActivity(),28));                }else                {                    params=new ViewGroup.MarginLayoutParams(ViewGroup.MarginLayoutParams.WRAP_CONTENT,DipUtil.dip2px(getActivity(),28));                    textView.setPadding(DipUtil.dip2px(getActivity(), 12), 0, DipUtil.dip2px(getActivity(), 12), 0);                }                textView.setLayoutParams(params);                textView.setGravity(Gravity.CENTER);                textView.setId(R.id.option_tv);                textView.setText(skinCardTagOption.getTagName());                textView.setTag(skinCardTagOption);                textView.setBackgroundResource(R.drawable.beauty_info_selector);                relativeLayout.addView(textView);                RelativeLayout.LayoutParams txtParams= (RelativeLayout.LayoutParams) textView.getLayoutParams();                txtParams.setMargins(DipUtil.dip2px(getActivity(),5),DipUtil.dip2px(getActivity(),7),
                 DipUtil.dip2px(getActivity(),5),DipUtil.dip2px(getActivity(),7));                textView.setLayoutParams(txtParams);                TextView tagTV=new TextView(getActivity());                ViewGroup.MarginLayoutParams tagParams=new ViewGroup.MarginLayoutParams(DipUtil.dip2px(getActivity(),15),
                 DipUtil.dip2px(getActivity(), 15));                tagTV.setLayoutParams(tagParams);                tagTV.setBackgroundResource(R.drawable.label_item_selector);                relativeLayout.addView(tagTV);                RelativeLayout.LayoutParams reParams= (RelativeLayout.LayoutParams) tagTV.getLayoutParams();                reParams.topMargin=DipUtil.dip2px(getActivity(),3);                reParams.rightMargin=DipUtil.dip2px(getActivity(),1);                reParams.addRule(RelativeLayout.ALIGN_RIGHT,R.id.option_tv);                tagTV.setLayoutParams(reParams);
         上面这段代码,我是构建了一个相对布局。在相对布局中add了2个textview,并且tagTV的右边坐标是以textview的右边坐标为基准线来设置的。也就是说,在没有给tagTV设置margin的情况下,它们两的右边坐标是相等的。所以最终效果是这样的:

                                                   

                RelativeLayout.LayoutParams reParams= (RelativeLayout.LayoutParams) tagTV.getLayoutParams();                           reParams.addRule(RelativeLayout.ALIGN_RIGHT,R.id.option_tv);                tagTV.setLayoutParams(reParams);
         一、alignParentRight和alignRight:  

        所以我们看这一段,addRule方法,就是在相对布局的时候,当前控件设置基准线的。前面一个参数代表什么样的基准线,左边、右边、上边、下边。后面一个参数代表,以哪一个控件作为标准。除了这种用法,我们还可以设置android:layout_alignParentRight这些属性等等。

 lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
         二、drawableRight:

   drawableTop或者drawableRight这些也是我们为textview或者button这些控件,常用的设置选项。但是在代码中,却没有setDrawTop这些方法。那我们应该怎么实现?可以参考以下代码:    

                Drawable drawable=getResources().getDrawable(R.drawable.tag_select);                drawable.setBounds(0,0,drawable.getMinimumWidth(),drawable.getMinimumHeight());                textView.setCompoundDrawables(null,null,drawable,null);
          这样我们就通过代码为textview设置了drawableRight。

          三、TextView加下划线或者中划线或者应用不同颜色:

// 中划线

view sourceprint?
1.textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); // 设置中划线并加清晰

// 下划线

view sourceprint?
1.textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);

//取消设置的线

view sourceprint?
1.textView.getPaint().setFlags(0); // 取消设置的的划线

        还有一种方式是直接使用HTML的标签来设置下划线:

    holder.originPriceTV.setText(Html.fromHtml("<font color='#999999'> <u>测试</u></font>"+"谢谢"));
        这种方法不仅更简单而且更灵活,而且可以同时设置多种效果,不仅可以设置不同的颜色,同时还可以设置下划线等等。当然不保证HTML的所有标签都能使用。

        四、setScaleY:

            view.setScaleY(0.8f);            view.setAlpha(0.8f);
        有时候,我们需要直接缩放控件,而不需要动画。那么就可以直接用setScaley这些属性,直接缩放控件了。


0 0
原创粉丝点击