• android studio 自定义控件


    第一种方式:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:background="#ff28f010"
        android:layout_height="100px">
    
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/ic_launcher"
            android:id="@+id/imageButton"
            android:gravity="center"
            android:text="返回"
            android:textColor="#f0a4cc"
            android:layout_margin="5dp"
            />
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="100px"
            android:id="@+id/textView2"
            android:text="标题"
            android:gravity="center_vertical|center_horizontal"
            android:textSize="45px"
    
            android:layout_weight="0.23" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageButton2"
            android:layout_margin="5dp"
            android:background="@drawable/ic_launcher"
            android:textColor="#f0a4cc"
            android:text="编辑"/>
    
    
    </LinearLayout>

    如果其他的地方引用,直接使用<include layout="@layout/title"/>

    第二种方式:

    xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:background="#0000ff"
            android:layout_height="45dp">
    
            <Button
                android:id="@+id/title_bar_left"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="5dp"
                android:background="@mipmap/ic_launcher"
                android:minHeight="45dp"
                android:minWidth="45dp"
                android:textSize="14sp" />
    
            <TextView
                android:id="@+id/title_bar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="登录"
                android:singleLine="true"
                android:textSize="17sp" />
    
            <Button
                android:id="@+id/title_bar_right"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="7dp"
                android:text="提交"
                android:textColor="@android:color/white"
                android:background="@null"
                android:minHeight="45dp"
                android:minWidth="45dp"
                android:textSize="14sp" />
        </RelativeLayout>
    
    </LinearLayout>
    

     attrs。xml代码

    <declare-styleable name="CustomTitleBar">
            <attr name="title_background_color" format="reference|integer" />
            <attr name="left_button_visible" format="boolean" />
            <attr name="right_button_visible" format="boolean" />
            <attr name="title_text" format="string" />
            <attr name="title_text_color" format="color" />
            <attr name="title_text_drawable" format="reference|integer" />
            <attr name="right_button_text" format="string" />
            <attr name="right_button_text_color" format="color" />
            <attr name="right_button_drawable" format="reference|integer" />
            <attr name="left_button_text" format="string" />
            <attr name="left_button_text_color" format="color" />
            <attr name="left_button_drawable" format="reference|integer" />
        </declare-styleable>
    

     自定义:

    public class CustomTitleBar  extends RelativeLayout {
    
        private Button titleBarLeftBtn;
        private Button titleBarRightBtn;
        private TextView titleBarTitle;
    
        public CustomTitleBar(Context context, AttributeSet attrs) {
            super(context, attrs);
            LayoutInflater.from(context).inflate(R.layout.custom_title_bar, this, true);
            titleBarLeftBtn = (Button) findViewById(R.id.title_bar_left);
            titleBarRightBtn = (Button) findViewById(R.id.title_bar_right);
            titleBarTitle = (TextView) findViewById(R.id.title_bar_title);
    
            TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.CustomTitleBar);
            if (attributes != null) {
                //处理titleBar背景色
                int titleBarBackGround = attributes.getResourceId(R.styleable.CustomTitleBar_title_background_color, Color.GREEN);
                setBackgroundResource(titleBarBackGround);
                //先处理左边按钮
                //获取是否要显示左边按钮
                boolean leftButtonVisible = attributes.getBoolean(R.styleable.CustomTitleBar_left_button_visible, true);
                if (leftButtonVisible) {
                    titleBarLeftBtn.setVisibility(View.VISIBLE);
                } else {
                    titleBarLeftBtn.setVisibility(View.INVISIBLE);
                }
                //设置左边按钮的文字
                String leftButtonText = attributes.getString(R.styleable.CustomTitleBar_left_button_text);
                if (!TextUtils.isEmpty(leftButtonText)) {
                    titleBarLeftBtn.setText(leftButtonText);
                    //设置左边按钮文字颜色
                    int leftButtonTextColor = attributes.getColor(R.styleable.CustomTitleBar_left_button_text_color, Color.WHITE);
                    titleBarLeftBtn.setTextColor(leftButtonTextColor);
                } else {
                    //设置左边图片icon 这里是二选一 要么只能是文字 要么只能是图片
                    int leftButtonDrawable = attributes.getResourceId(R.styleable.CustomTitleBar_left_button_drawable, R.mipmap.ic_launcher);
                    if (leftButtonDrawable != -1) {
                        titleBarLeftBtn.setBackgroundResource(leftButtonDrawable);
                    }
                }
    
                //处理标题
                //先获取标题是否要显示图片icon
                int titleTextDrawable = attributes.getResourceId(R.styleable.CustomTitleBar_title_text_drawable, -1);
                if (titleTextDrawable != -1) {
                    titleBarTitle.setBackgroundResource(titleTextDrawable);
                } else {
                    //如果不是图片标题 则获取文字标题
                    String titleText = attributes.getString(R.styleable.CustomTitleBar_title_text);
                    if (!TextUtils.isEmpty(titleText)) {
                        titleBarTitle.setText(titleText);
                    }
                    //获取标题显示颜色
                    int titleTextColor = attributes.getColor(R.styleable.CustomTitleBar_title_text_color, Color.WHITE);
                    titleBarTitle.setTextColor(titleTextColor);
                }
    
                //先处理右边按钮
                //获取是否要显示右边按钮
                boolean rightButtonVisible = attributes.getBoolean(R.styleable.CustomTitleBar_right_button_visible, true);
                if (rightButtonVisible) {
                    titleBarRightBtn.setVisibility(View.VISIBLE);
                } else {
                    titleBarRightBtn.setVisibility(View.INVISIBLE);
                }
                //设置右边按钮的文字
                String rightButtonText = attributes.getString(R.styleable.CustomTitleBar_right_button_text);
                if (!TextUtils.isEmpty(rightButtonText)) {
                    titleBarRightBtn.setText(rightButtonText);
                    //设置右边按钮文字颜色
                    int rightButtonTextColor = attributes.getColor(R.styleable.CustomTitleBar_right_button_text_color, Color.WHITE);
                    titleBarRightBtn.setTextColor(rightButtonTextColor);
                } else {
                    //设置右边图片icon 这里是二选一 要么只能是文字 要么只能是图片
                    int rightButtonDrawable = attributes.getResourceId(R.styleable.CustomTitleBar_right_button_drawable, -1);
                    if (rightButtonDrawable != -1) {
                        titleBarRightBtn.setBackgroundResource(rightButtonDrawable);
                    }
                }
                attributes.recycle();
            }
        }
    
        public void setTitleClickListener(OnClickListener onClickListener) {
            if (onClickListener != null) {
                titleBarLeftBtn.setOnClickListener(onClickListener);
                titleBarRightBtn.setOnClickListener(onClickListener);
            }
        }
    
        public Button getTitleBarLeftBtn() {
            return titleBarLeftBtn;
        }
    
        public Button getTitleBarRightBtn() {
            return titleBarRightBtn;
        }
    
        public TextView getTitleBarTitle() {
            return titleBarTitle;
        }
    
    }
    

     最后其他布局使用

     <com.cqytjr.www.cheji.view.CustomTitleBar
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_marginTop="10dp"
            tools:left_button_text="左边"
            tools:left_button_text_color="#ff0000"
            tools:right_button_drawable="@mipmap/titlebar_add_icon"
            tools:title_background_color="@color/blue"
            tools:title_text="标题5" />
    

     

  • 相关阅读:
    程序猿之没事瞎吐槽
    iOS 打印日志的保存 (一)
    Xcode4.5 本地化,多语言设置
    css3渐变画斜线 demo
    关于JavaScript的一些记录
    Windows 10 自带输入法(微软拼音)繁体简体切换快捷键
    ng-class用法小记
    基于vue监听滚动事件,实现锚点链接平滑滚动
    总结继承的几种方式
    浅谈jQuery的内部框架结构,操作
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/6895205.html
Copyright © 2020-2023  润新知