Android

Android入门06 -- 自定义控件

2022-03-11  本文已影响0人  YanZi_33

自定义组合控件

image.png
package com.example.yyshop.general.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.yyshop.R;

public class SFCommonCell extends RelativeLayout {

    private ImageView iv_left;
    private TextView tv_text;
    private ImageView iv_right;

    private String text;
    private int textColor;
    private float textSize;
    private int leftIcon;
    private int rightIcon;

    public SFCommonCell(Context context) {
        this(context,null);
    }

    public SFCommonCell(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public SFCommonCell(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context,attrs);
    }

    private void initView(Context context,AttributeSet attrs) {
        //从XML中加载布局
        LayoutInflater.from(context).inflate(R.layout.sf_common_cell,this,true);
        iv_left = findViewById(R.id.sf_common_cell_iv_left);
        tv_text = findViewById(R.id.sf_common_cell_tv);
        iv_right = findViewById(R.id.sf_common_cell_iv_right);

        //从Attrs.xml中加载自定义属性
        TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.SFCommonCell);
        text = typedArray.getString(R.styleable.SFCommonCell_text);
        textColor = typedArray.getColor(R.styleable.SFCommonCell_textColor, Color.BLACK);
        textSize = typedArray.getDimension(R.styleable.SFCommonCell_textSize,20f);
        leftIcon = typedArray.getResourceId(R.styleable.SFCommonCell_leftIcon,0);
        rightIcon = typedArray.getResourceId(R.styleable.SFCommonCell_rightIcon,0);

        //将Attrs.xml中属性值 赋值给目标控件
        setText(text);
        setTextColor(textColor);
        setTextSize(textSize);
        setLeftIcon(leftIcon);
        setRightIcon(rightIcon);

        //typedArray必须回收
        typedArray.recycle();
    }

    //设置属性
    public void setText(String text) {
        tv_text.setText(text);
    }

    public void setTextColor(int color) {
        tv_text.setTextColor(color);
    }

    public void setTextSize(float size) {
        tv_text.setTextSize(size);
    }

    public void setLeftIcon(int resourceId) {
        iv_left.setImageResource(resourceId);
    }

    public void setRightIcon(int resourceId) {
        iv_right.setImageResource(resourceId);
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="match_parent"
    android:layout_height="75dp"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageView
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:id="@+id/sf_common_cell_iv_left"
        android:layout_centerVertical="true"
        android:layout_marginLeft="15dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sf_common_cell_tv"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/sf_common_cell_iv_left"
        android:layout_marginLeft="15dp"/>

    <ImageView
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:id="@+id/sf_common_cell_iv_right"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="15dp"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/grey"
        android:layout_alignParentBottom="true"/>

</RelativeLayout>
image.png
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- SFCommonCell的自定义属性 -->
    <declare-styleable name="SFCommonCell">
        <!-- 标题 -->
        <attr name="text" format="string"/>
        <!-- 标题颜色 -->
        <attr name="textColor" format="color"/>
        <!-- 标题文字大小 -->
        <attr name="textSize" format="dimension"/>
        <!-- 左侧图片 -->
        <attr name="leftIcon" format="reference"/>
        <!-- 右侧图片 -->
        <attr name="rightIcon" format="reference"/>
    </declare-styleable>
</resources>
image.png image.png image.png
<attr name="leftIcon" format="reference"/>
app:leftIcon="@drawable/add_select"
<attr name="textColor" format="color"/>
app:textColor="@color/black"
<attr name="text" format="string"/>
app:text="中国工商银行"
<attr name="textSize" format="dimension"/>
app:textSize="8sp"
上一篇 下一篇

猜你喜欢

热点阅读