Android开发学习笔记-自定义组合控件

为了能让代码能够更多的复用,故使用组合控件。下面是我正在写的项目中用到的方法。

1、先写要组合的一些需要的控件,将其封装到一个布局xml布局文件中。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="68dip"
    android:id="@+id/aaa"
    >
        <TextView
        android:id="@+id/tv_update_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:textSize="20sp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:text="是否升级" />
        <TextView
        android:layout_below="@id/tv_update_title"
        android:id="@+id/tv_update_content"
        android:textSize="15sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:text="停止更新" />

        <CheckBox
            android:checked="false"
            android:id="@+id/cb_isupdate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true" />

    </RelativeLayout>
2、自定义Java类
package com.frank.mobilesafe.ui;

import com.frank.mobilesafe.R;

import android.R.bool;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class SettingItemView extends RelativeLayout {
    private CheckBox cb_update;
    private TextView tv_update_title;
    private TextView tv_update_content;

    public SettingItemView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView(context);
    }

    private void initView(Context context) {
        // TODO Auto-generated method stub
        View.inflate(context, R.layout.setting_item_view, this);
        cb_update = (CheckBox) findViewById(R.id.cb_isupdate);
        tv_update_title =  (TextView) findViewById(R.id.tv_update_title);
        tv_update_content = (TextView) findViewById(R.id.tv_update_content);

    }

    public SettingItemView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    public SettingItemView(Context context) {
        super(context);
        initView(context);
    }

    /**
     * 检查是否选中
     * @return
     */
    public boolean isChecked() {
        return cb_update.isChecked();
    }
    /**
     * 设置组合控件的状态
     * @param isChecked
     */
    public void SetChecked(boolean isChecked) {
        cb_update.setChecked(isChecked);
    }
    /**
     * 设置描述信息
     * @param isChecked
     */
    public void SetDesc(String text) {
        tv_update_content.setText(text);
    }
}
3、在主界面中引用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv_maintitle"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:background="#8866ff00"
        android:gravity="center"
        android:text="设置中心"
        android:textSize="22sp" />

   <com.frank.mobilesafe.ui.SettingItemView
       android:id="@+id/siv_update"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />
</LinearLayout>
4、主界面调用
public class SettingActivity extends Activity {

    private SettingItemView siv_update;
    private SharedPreferences sp_update;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
        siv_update = (SettingItemView) findViewById(R.id.siv_update);
        sp_update = getSharedPreferences("config",MODE_PRIVATE);
        boolean  update = sp_update.getBoolean("update", false);
        if (update) {
            siv_update.SetChecked(true);
            siv_update.SetDesc("有新版本则更新");
        }
        else
        {
            siv_update.SetChecked(false);
            siv_update.SetDesc("停止更新");
        }
        siv_update.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Editor editor = sp_update.edit();
                // TODO Auto-generated method stub
                if (siv_update.isChecked()) {
                    siv_update.SetChecked(false);
                    siv_update.SetDesc("停止更新");
                    editor.putBoolean("update", false);
                }
                else{
                    siv_update.SetChecked(true);
                    siv_update.SetDesc("有新版本则更新");
                    editor.putBoolean("update", true);
                }
            }
        });
    }

    
}
5、完成

正常显示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 Android 开关按钮的背景图和自定义控件,我可以为您提供一些学习笔记和分享。 1. Android 开关按钮背景图 在 Android 中,开关按钮的背景图可以通过 drawable 文件夹下的 xml 文件来实现。以下是一个简单的例子: ```xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/switch_on" android:state_checked="true"/> <item android:drawable="@drawable/switch_off"/> </selector> ``` 其中,我们使用了 selector 标签来表示按钮的状态。在 checked 为 true 时,使用 switch_on 图片作为背景图;否则使用 switch_off 图片作为背景图。 2. Android 自定义控件之开关按钮学习笔记分享 如果您想完全自定义一个开关按钮控件,以下是一些实现步骤: 1) 创建一个继承自 CompoundButton 的类,例如 SwitchButton。 2) 实现 SwitchButton 的构造函数和一些必要的属性。 ```java public class SwitchButton extends CompoundButton { public SwitchButton(Context context) { super(context); init(); } public SwitchButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } public SwitchButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { // 初始化一些属性 } } ``` 3) 在 init() 方法中,设置一些默认属性,例如背景图、文字等。 4) 重写 onMeasure() 方法,计算出 SwitchButton 的宽高。 ```java @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(widthSize, heightSize); } ``` 5) 重写 onDraw() 方法,绘制 SwitchButton 的背景图和文字。 ```java @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制背景图和文字 } ``` 6) 重写 onTouchEvent() 方法,处理用户的触摸事件,例如改变 SwitchButton 的状态。 ```java @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 处理按下事件 break; case MotionEvent.ACTION_MOVE: // 处理移动事件 break; case MotionEvent.ACTION_UP: // 处理抬起事件 break; } return super.onTouchEvent(event); } ``` 7) 最后,将 SwitchButton 添加到布局文件中即可。 ```xml <com.example.myapp.SwitchButton android:id="@+id/switchButton" android:layout_width="wrap_content" android:layout_height="wrap_content"/> ``` 以上就是自定义开关按钮控件的一些步骤和注意事项。希望对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值