自定义view继承RelativeLayout

来源:互联网 发布:在墨尔本生活知乎 编辑:程序博客网 时间:2024/05/20 06:23

一.实现思路
先创建一个继承RelativeLayout的类,创建与它相对应的布局,布局随意。给它一个方法获取控件id,然后设置基本属性内容,最后设置监听。
创建attrs设置标题栏的基本属性,然后在activity_main中设置这个自定义控件。
二.实现的代码步骤
titleset.xml布局,设置一个自定义标题栏,控件自己可以随意设计

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:background="@color/colorAccent"    android:layout_width="match_parent"    android:layout_height="56dp"     > <TextView    android:id="@+id/textview"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerInParent="true"    /> <ImageView    android:id="@+id/imageview"    android:layout_width="100dp"    android:layout_height="100dp"      /> </RelativeLayout>

在values里创建attrs.xml,通过这个布局调用在主布局中设置的属性

 <declare-styleable name="TitleSet"><!--设置标题的颜色-->        <attr name="MYZT" format="color" />        <!--设置标题内容-->        <attr name="MYR" format="string" />        <!--设置标题大小-->   <attr name="mysize" format="integer" />   <!--设置图片颜色-->        <attr name="photo" format="color"/>    </declare-styleable>

创建TitleSet类继承RelativeLayout

public class TitleSet extends RelativeLayout {    TextView textView;//标题    ImageView imageView;//图片public BarClickListener listener;//监听      public void setListener(BarClickListener listener) {        this.listener = listener;    }    /**     * 一种参数     * @param context     */    public TitleSet(Context context) {        super(context);        initview(null);    }    /**     * 两种参数     * @param context     * @param attrs     */    public TitleSet(Context context, AttributeSet attrs) {        super(context, attrs);        initview(attrs);    }    private void initview(AttributeSet attrs) {        //获取布局        View v = LayoutInflater.from(getContext()).inflate(R.layout.titleset, this);        textView = (TextView) v.findViewById(R.id.textview);        imageView = (ImageView) v.findViewById(R.id.imageview);        //标题的监听textView.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {        if(listener!=null){            listener.titleListener(v);        }    }});//图片的监听        imageView.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if (listener!=null){                    listener.imageListener(v);                }            }        });        //attrs判空        if (attrs != null) {            TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.TitleSet);           //标题栏            String str = a.getString(R.styleable.TitleSet_MYR);            //设置字体颜色,默认黑色         int co= a.getColor(R.styleable.TitleSet_MYZT, Color.BLACK);            textView.setTextColor(co);            //设置字体大小          int size=  a.getInteger(R.styleable.TitleSet_mysize,20);            textView.setTextSize(size);           //设置图片的颜色,默认红色          int ph=  a.getColor(R.styleable.TitleSet_photo,Color.RED);            imageView.setBackgroundColor(ph);            ///如果这是一个空的            if (TextUtils.isEmpty(str)) {                //就默认项目名称                 textView.setText(getResources().getString(R.string.app_name));            } else {                textView.setText(str);           }            a.recycle();//一定记得销毁        }    }    //设置监听的方法public interface BarClickListener{    public void imageListener(View v);    public void titleListener(View v);}}

activity_main.xml布局

 <com.example.rikaojineng8_04.TitleSet        android:id="@+id/title"        android:layout_width="match_parent"        android:layout_height="match_parent"        app:MYR="标题栏"        app:mysize="25"        app:photo="#f3f3"        app:MYZT="#000" />

MainActivity类

public class MainActivity extends AppCompatActivity implements TitleSet.BarClickListener{    TitleSet titleSet;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);titleSet= (TitleSet) findViewById(R.id.title);        titleSet.setListener(this);    }    @Override    public void imageListener(View v) {        Toast.makeText(this,"图片",Toast.LENGTH_LONG).show();    }    @Override    public void titleListener(View v) {        Toast.makeText(this,"标题",Toast.LENGTH_LONG).show();    }}

这里写图片描述

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 初中的孩子不爱学习怎么办 小孩不爱读书不做作业怎么办 母亲性格内向儿子也是内向怎么办 我儿子不爱吃怎么办啊 孩子练字就是记不住怎么办 孩子不愿意和小朋友玩怎么办 丈夫去世了婆婆不喜欢儿媳妇怎么办 高考看不下去书怎么办 在东莞读书读不成高中怎么办 嗓子哑了怎么办土方法 小孩舌头太长太大讲话不清楚怎么办 一周岁不喝奶粉怎么办 一岁的宝宝不吃奶粉怎么办 小孩不爱吃饭怎么办吃什么药 小孩这几天不爱吃饭怎么办 宝宝这几天不爱吃饭怎么办 想看书看不进去怎么办 宝宝3岁不爱看书怎么办 4岁宝宝不爱看书怎么办 1岁宝宝不爱看书怎么办 孩子一看书就哭怎么办 我不想读大专了怎么办 一年级的小孩不爱学习怎么办 高中的孩子不爱学习怎么办 9个月宝宝肠胃不好怎么办 孩子高烧过后干呕不爱吃饭怎么办 母乳涨奶发烧了怎么办 涨奶发烧了怎么办啊 2岁宝贝不吃饭怎么办 4个月的婴儿厌食怎么办 2个月婴儿厌食怎么办 3个月宝宝厌奶怎么办 没胃口吃不下饭怎么办 小孩吃多了积食怎么办 孩子吃撑了难受怎么办 卵巢早衰月经量少怎么办 7岁孩吃饭少消瘦怎么办 宝宝3岁不吃饭怎么办 小孩吃多了吐了怎么办 6岁儿童越来越瘦怎么办 7岁儿童不吃饭怎么办