自定义View自定义标题

来源:互联网 发布:mac设置隐藏文件夹 编辑:程序博客网 时间:2024/06/05 05:26
这是标签的布局activity_title:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/titlefit"    android:layout_width="match_parent"    android:layout_height="50dp"    android:background="#ff0000"    android:orientation="horizontal">    <Button        android:id="@+id/btn_return"        android:layout_width="wrap_content"        android:layout_height="50dp"        android:background="#0000ff"        android:text="返回"        />    <TextView        android:id="@+id/tv_title"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_weight="1"        android:background="#ff8800"        android:gravity="center"        android:text="自定义标题栏" />    <Button        android:id="@+id/btn_more"        android:layout_width="wrap_content"        android:layout_height="50dp"        android:background="#0000ff"        android:text="更多"        /></LinearLayout>
在values下创建attrs.xml并定义属性:
<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="MyTitleFit">        <!--定义标题的属性-->        <attr name="title" format="string"></attr>        <attr name="titleSize" format="dimension"></attr>        <attr name="titleColor" format="color"></attr>        <attr name="bgcolor" format="color"></attr>        <!--定义左边按钮的属性-->        <attr name="btnlefttext" format="string"></attr>        <attr name="btnleftSize" format="dimension"></attr>        <attr name="btnleftcolor" format="color"></attr>        <attr name="btnleftbgcolor" format="reference"></attr>        <!--定义右边按钮的属性-->        <attr name="btnrighttext" format="string"></attr>        <attr name="btnrightSize" format="dimension"></attr>        <attr name="btnrightcolor" format="color"></attr>        <attr name="btnrightbgcolor" format="reference"></attr>    </declare-styleable></resources>

在res创建drawable用来设置改变颜色:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <!--定义改变按钮颜色-->    <item android:drawable="@color/colorAccent" android:state_pressed="true"/>    <item android:drawable="@color/colorPrimary" android:state_pressed="false"/></selector>

这是activity_main.xml的布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:orientation="horizontal"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.heihei.weekedproject.MainActivity">    <com.heihei.weekedproject.MyTitleFit        android:id="@+id/mytitlefit"        android:layout_width="match_parent"        android:layout_height="80dp"        app:title="这是Mainactivity"        app:titleSize="12sp"        app:titleColor="#000000"        app:bgcolor="#ff8800"        app:btnleftbgcolor="@drawable/selector"        app:btnleftSize="12sp"        app:btnlefttext="返回"        app:btnleftcolor="#ffffff"        app:btnrightbgcolor="@drawable/selector"        app:btnrightSize="12sp"        app:btnrighttext="更多"        app:btnrightcolor="#ffffff"        >    </com.heihei.weekedproject.MyTitleFit></LinearLayout>

设置自己定义属性的类
public class MyTitleFit extends LinearLayout {    private Button btn_return;    private Button btn_more;    private String title;    private float titleSize;    private int titleColor;    private int bgColor;    private LinearLayout titlefit;    private String btnlefttext;    private float btnleftSize;    private int btnleftColor;    private String btnrighttext;    private float btnrightSize;    private int btnrightColor;    private TextView tv_title;    private Drawable btnrightbgcolor;    private Drawable btnleftbgcolor;    public MyTitleFit(Context context) {        super(context);        //创建方法        initView(context, null);    }    public MyTitleFit(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);        //创建方法        initView(context, attrs);    }    //初始化控件的方法    private void initView(Context context, AttributeSet attrs) {        //找到关于标题的xml        View inflate = inflate(context, R.layout.activity_title, this);       //依次找到控件,左右两边都是按钮中间是TextView        btn_return = (Button) inflate.findViewById(R.id.btn_return);        btn_more = (Button) inflate.findViewById(R.id.btn_more);        tv_title = (TextView) inflate.findViewById(R.id.tv_title);        titlefit = (LinearLayout) inflate.findViewById(R.id.titlefit);        //点击左边返回的按钮的监听,并调用接口        btn_return.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if (leftOnClickListener != null) {                    leftOnClickListener.leftClick(v);                }            }        });    //点击右边按钮的监听        btn_more.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if (rightOnClickListener != null) {                    rightOnClickListener.rightClick(v);                }            }        });        if (attrs == null) {            return;        }        //初始化自定义属性的方法        initattrs(context, attrs);        //把控件设置定义属性的方法        setViewContent();    }    private void initattrs(Context context, AttributeSet attrs) {        if (attrs == null) {            return;        }        //找到自己定义的属性        TypedArray typedarrat = context.obtainStyledAttributes(attrs, R.styleable.MyTitleFit);      //获得给标题定义的属性 文本  文字大小 文字颜色 背景颜色        title = typedarrat.getString(R.styleable.MyTitleFit_title);        titleSize = typedarrat.getDimensionPixelSize(R.styleable.MyTitleFit_titleSize, 16);        titleColor = typedarrat.getColor(R.styleable.MyTitleFit_titleColor, Color.RED);        bgColor = typedarrat.getColor(R.styleable.MyTitleFit_bgcolor, Color.GREEN);        //获得给左边返回按钮定义的属性 文本  文字大小 文字颜色 背景颜色        btnleftSize = typedarrat.getDimensionPixelSize(R.styleable.MyTitleFit_btnleftSize, 12);        btnlefttext = typedarrat.getString(R.styleable.MyTitleFit_btnlefttext);        btnleftColor = typedarrat.getColor(R.styleable.MyTitleFit_btnleftcolor, Color.YELLOW);        btnleftbgcolor = typedarrat.getDrawable(R.styleable.MyTitleFit_btnleftbgcolor);        //获得给右边更多按钮定义的属性 文本  文字大小 文字颜色 背景颜色        btnrightSize = typedarrat.getDimensionPixelSize(R.styleable.MyTitleFit_btnrightSize, 14);        btnrighttext = typedarrat.getString(R.styleable.MyTitleFit_btnrighttext);        btnrightColor = typedarrat.getColor(R.styleable.MyTitleFit_btnrightcolor, Color.BLUE);        btnrightbgcolor = typedarrat.getDrawable(R.styleable.MyTitleFit_btnrightbgcolor);    }    private void setViewContent() {        //给左边按钮附上默认属性  文本  文字大小 文字颜色 背景颜色        btn_return.setText(btnlefttext);        btn_return.setTextSize(btnleftSize);        btn_return.setTextColor(btnleftColor);        btn_return.setBackground(btnleftbgcolor);        //给右边按钮附上默认属性  文本  文字大小 文字颜色 背景颜色        btn_more.setText(btnrighttext);        btn_more.setTextSize(btnrightSize);        btn_more.setTextColor(btnrightColor);        btn_more.setBackground(btnrightbgcolor);        //给标题附上默认属性  文本  文字大小 文字颜色 背景颜色        tv_title.setText(title);        tv_title.setTextSize(titleSize);        tv_title.setTextColor(titleColor);        tv_title.setBackgroundColor(bgColor);    }    //定义一个接口,实现点击左边返回按钮为了实现Toast等一些操作    public interface leftOnClickListener {        void leftClick(View v);    }    private leftOnClickListener leftOnClickListener;    public void SetleftOnClickListener(leftOnClickListener mleftOnClickListener) {        this.leftOnClickListener = mleftOnClickListener;    }    //定义一个接口,实现点击右边更多按钮为了实现Toast等一些操作    public interface rightOnClickListener {        void rightClick(View v);    }    private rightOnClickListener rightOnClickListener;    public void SetrightOnClickListener(rightOnClickListener mrightOnClickListener) {        this.rightOnClickListener = mrightOnClickListener;    }}

MainActivity 设置接口
public class MainActivity extends AppCompatActivity {    private MyTitleFit mytitlefit;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找到在MainActivity的自定义布局        mytitlefit = (MyTitleFit) findViewById(R.id.mytitlefit);        //调用它的接口,点击左边返回按钮让它Toast一些内容        mytitlefit.SetleftOnClickListener(new MyTitleFit.leftOnClickListener() {            @Override            public void leftClick(View v) {                Toast.makeText(MainActivity.this, "这是左边的按钮", Toast.LENGTH_SHORT).show();            }        });//调用它的接口,点击右边更多按钮让它Toast一些内容        mytitlefit.SetrightOnClickListener(new MyTitleFit.rightOnClickListener() {            @Override            public void rightClick(View v) {                Toast.makeText(MainActivity.this, "这是右边的按钮", Toast.LENGTH_SHORT).show();            }        });    }}

原创粉丝点击