当前位置:   article > 正文

Android - 自定义控件_android 自定义控件

android 自定义控件

1. 添加自定义Layout

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
custom_item.xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:scaleType="centerInside" />

    <TextView
        android:id="@+id/item_text"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_vertical" />

</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2. 添加自定义控件的类

CustomItem.java 代码:

public class CustomItem extends FrameLayout {

    private Context mContext;
    private View mView;
    private ImageView mItemImage;
    private TextView mItemText;

    public CustomItem(@NonNull Context context) {
        super(context);
        init(context, null);
    }

    public CustomItem(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public CustomItem(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    public CustomItem(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs){
        mContext = context;

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = inflater.inflate(R.layout.custom_item, this, true);

        mItemImage = findViewById(R.id.item_image);
        mItemText = findViewById(R.id.item_text);

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

3. 自定义控件的属性

3.1 添加 attrs_custom_item.xml

在这里插入图片描述

<resources>
    <declare-styleable name="CustomItem">
        <attr name="custom_item_text" format="string" />
        <attr name="custom_item_image" format="color|reference" />
    </declare-styleable>
</resources>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.2 CustomItem.java类中添加属性的处理

在这里插入图片描述
CustomItem.java类最终代码为:

public class CustomItem extends FrameLayout {

    private Context mContext;
    private View mView;
    private ImageView mItemImage;
    private TextView mItemText;

    public CustomItem(@NonNull Context context) {
        super(context);
        init(context, null);
    }

    public CustomItem(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public CustomItem(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    public CustomItem(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs){
        mContext = context;

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = inflater.inflate(R.layout.custom_item, this, true);

        mItemImage = findViewById(R.id.item_image);
        mItemText = findViewById(R.id.item_text);

        TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.CustomItem);
        mItemText.setText(a.getString(R.styleable.CustomItem_custom_item_text));
        mItemImage.setImageResource(a.getResourceId(R.styleable.CustomItem_custom_item_image, R.drawable.image3));
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

4. 在activity_main.xml中添加自定义控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.example.customview.CustomItem
        android:layout_width="match_parent"
        android:layout_height="40dp"
        app:custom_item_text="第一行"
        app:custom_item_image="@drawable/image1"/>

    <com.example.customview.CustomItem
        android:layout_width="match_parent"
        android:layout_height="40dp"
        app:custom_item_text="第二行"
        app:custom_item_image="@drawable/image2"/>

</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

5. 效果

在这里插入图片描述

6. 代码

https://gitee.com/jie-xio/android_samples/tree/master/CustomControl




7. 更优步骤

以上添加自定义 custom_item.xmlCustomItem.javaattrs_custom_item.xml 的步骤,在Android studio中有简洁的步骤,自动创建这些文件:
在这里插入图片描述
在这里插入图片描述
自动会添加上这些文件,自己只需要按照本文上面的相应内容做修改即可
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/110081
推荐阅读
相关标签
  

闽ICP备14008679号