组合自定义控件的步骤详解

Android


步骤:

  • 1 自定义组合控件的布局settint_view.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:gravity="center_vertical"><TextViewandroid:id="@+id/title_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="15dp"android:layout_marginTop="5dp"android:text="自动更新"/><TextViewandroid:id="@+id/des_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/title_tv"android:layout_marginTop="5dp"android:layout_marginLeft="15dp"android:text="自动更新关闭"android:textSize="10dp"android:textColor="#dedcdc"/><!--该控件不支持点击事件,且不能获取焦点--><CheckBoxandroid:id="@+id/checkbox"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10dp"android:checked="true"android:layout_alignParentRight="true"android:clickable="false"android:focusable="false"/><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#36000000"android:layout_marginTop="5dp"android:layout_below="@id/des_tv"/>
</RelativeLayout>

  • 2 创建一个自定义子和控件的类SettingView.java

package com.nlte.phonesafe.com.nlte.phonesafe.view;import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;import com.nlte.phonesafe.R;
import com.nlte.phonesafe.com.nlte.phonesafe.utils.CacheUtil;
import com.nlte.phonesafe.com.nlte.phonesafe.utils.LogUtil;/**自定义组合控件* Created by NLTE on 2016/3/22 0022.*/
public class SettingView extends LinearLayout {private TextView mTitleTv;//标题文本控件private TextView mDesTv;//描述private CheckBox mCheckBox;//复选框private View rootView;//组合自定义控件界面根节点对象private String title;private String des_on;private String des_off;/*1 把自定义组合控件的xml文件实例化为对象,并且添加到当前对象中,作为当前控件的子控件*//*2 自定义方法:操纵组合控件的自控件*/public SettingView(Context context) {super(context);init();}//布局xml实例化调用public SettingView(Context context, AttributeSet attrs) {super(context, attrs);init();//通过命名空间和属性名来获取属性值title = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","setting_title");des_on = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","setting_des_on");des_off = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","setting_des_off");//初始化自定义控件属性值mTitleTv.setText(title);if (CacheUtil.getBoolean(context, CacheUtil.APK_UPDATE)){mCheckBox.setChecked(true);mDesTv.setText(des_on);}else {mCheckBox.setChecked(false);mDesTv.setText(des_off);}}public SettingView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}/*初始化自定义组合控件界面*/private void init() {rootView = View.inflate(getContext(), R.layout.setting_view, this);mCheckBox = (CheckBox)rootView.findViewById(R.id.checkbox);mTitleTv = (TextView)rootView.findViewById(R.id.title_tv);mDesTv = (TextView)rootView.findViewById(R.id.des_tv);}/*自定义方法*///设置组合控件标题public void setTitle(String title){mTitleTv.setText(title);}//设置组合控件描述public void setDes(String des){mDesTv.setText(des);}//设置组合控件复选框public void setChecked(boolean isChecked){mCheckBox.setChecked(isChecked);if (isChecked){mDesTv.setText(des_on);}else {mDesTv.setText(des_off);}}//取得组合控件的状态public boolean getChecked(){return mCheckBox.isChecked();}
}

  • 3 自定义组合控件的属性
    -- 3.1 创建自定义属性/values/attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="SettingView"><attr name="setting_title" format="string"/><attr name="setting_des_on" format="string"/><attr name="setting_des_off" format="string"/></declare-styleable>
</resources>

-- 3.2 在xml中调用自定义的组合控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns: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="com.nlte.phonesafe.SettingActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="60dp"android:gravity="center"android:textSize="20sp"android:background="#8b71ef9d"android:text="设置中心"/><com.nlte.phonesafe.com.nlte.phonesafe.view.SettingViewandroid:id="@+id/update_sv"android:layout_width="match_parent"android:layout_height="wrap_content"app:setting_title="自动升级"app:setting_des_on="自动升级开启"app:setting_des_off="自动升级关闭" /><com.nlte.phonesafe.com.nlte.phonesafe.view.SettingViewandroid:id="@+id/soft_sv"android:layout_width="match_parent"android:layout_height="wrap_content"app:setting_title="软件锁"app:setting_des_on="软件锁开启"app:setting_des_off="软件锁关闭" /></LinearLayout>
  • 4 对控件的调用SettingActivity.java

package com.nlte.phonesafe;import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;import com.nlte.phonesafe.com.nlte.phonesafe.utils.CacheUtil;
import com.nlte.phonesafe.com.nlte.phonesafe.view.SettingView;public class SettingActivity extends AppCompatActivity {private Context context;private SettingView mUpdateSv;private SettingView mSoftLockSv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_setting);context = this;mUpdateSv = (SettingView)findViewById(R.id.update_sv);mSoftLockSv = (SettingView)findViewById(R.id.soft_sv);//设置自动升级自定义点击监听事件 每一次点击切换复选状态mUpdateSv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mUpdateSv.getChecked()){CacheUtil.putBoolean(context, CacheUtil.APK_UPDATE, false);mUpdateSv.setChecked(false);}else {CacheUtil.putBoolean(context, CacheUtil.APK_UPDATE, true);mUpdateSv.setChecked(true);}}});//对软件锁的点击事件mSoftLockSv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mSoftLockSv.getChecked()){mSoftLockSv.setChecked(false);}else {mSoftLockSv.setChecked(true);}}});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

magenta内核与linux,谷歌将推出新操作系统Fuchsia:Magenta语言为内核

谷歌现在研发出来并且推出使用的系统有Chrome OS、Android和Chromecasts&#xff0c;这三者在操作系统的市场中占得份额很高&#xff0c;但是好像谷歌对此并不满意&#xff0c;因为有相关消息显示&#xff0c;谷歌正在研发新的操作系统Fuchsia&#xff0c;该系统采用Magenta语言…

BZOJ 1968: [Ahoi2005]COMMON 约数研究 水题

1968: [Ahoi2005]COMMON 约数研究 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id1968 Description Input 只有一行一个整数 N&#xff08;0 < N < 1000000&#xff09;。 Output 只有一行输出&#xff0c;为整数M…

VC内存对齐准则(Memory alignment)

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 本文所有内容在建立在一个前提下&#xff1a;使用VC编译器。着重点在于&#xff1a;VC…

mysql 主主互备实现

今天星期天&#xff0c;么事就写个MYSQL的主主架构的博客&#xff0c;原理如下图&#xff0c;不是我画的网上找的。主机作用操作系统mysql版本对应IPvip数据库mysqlA(主)centos6.4mysql 5.5.48192.168.48.129192.168.48.126mysqlB(备)centos6.4mysql 5.5.48192.168.48.132一&am…

动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)

本节我们来看如何在实验环境中实施和配置如下 VLAN 网络 配置 VLAN 编辑 /etc/network/interfaces&#xff0c;配置 eth0.10、brvlan10、eth0.20 和 brvlan20。 下面用 vmdiff 展示了对 /etc/network/interfaces 的修改 重启宿主机&#xff0c;ifconfig 各个网络接口 用 brct…

Socket的3次握手链接与4次断开握手

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 连接握手&#xff1a; 1.客户端发送建立连接请求 &#xff08;发送请求&#xff09;2.…

Linux桌面需要强制访问控制,RHCSA 系列(十三): 在 RHEL 7 中使用 SELinux 进行强制访问控制...

RHCSA 认证&#xff1a;SELinux 精要和控制文件系统的访问尽管作为第一级别的权限和访问控制机制是必要的&#xff0c;但它们同样有一些局限&#xff0c;而这些局限则可以由安全增强 Linux(Security Enhanced Linux&#xff0c;简称为 SELinux)来处理。这些局限的一种情形是&am…

使用canvas实现擦玻璃效果

体验效果:http://hovertree.com/texiao/html5/25/效果图&#xff1a;代码如下&#xff1a; <!DOCTYPE html> <html> <head lang"zh"> <meta name"viewport" content"initial-scale1.0, maximum-scale1.0, user-scalableno, widt…

[转]opencv学习资料

转自&#xff1a;http://blog.csdn.net/poem_qianmo/article/details/20537737 1&#xff1a;Mat imread(const string& filename, intflags1 ); eg: Mat image0imread("dota.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);//载入最真实的图像 ge1i…

jQuery动态设置样式List item

前段时间&#xff0c;Insus.NET有修改一个功能《激活当前视图菜单高亮呈现》http://www.cnblogs.com/insus/p/5287093.html 今天Insus.NET想改用另外一个方法来实现&#xff0c;使用jQuery。在ASP.NET MVC 环境实现&#xff1a; 代码&#xff1a; <ul><li><a hr…

linux telnet 权限,允许telnet 通过root用户进行访问

允许telnet 通过root用户进行访问RHEL6:[rootclovem ~]# yum install telnet-server -y //安装telnet服务端[rootclovem ~]# cat /etc/xinetd.d/telnet //开启telnet的托管服务# default: on# description: The telnet server serves telnet sessions; it uses \#unencrypt…

TOUGHRADIUS 项目介绍

2019独角兽企业重金招聘Python工程师标准>>> TOUGHRADIUS 项目介绍 ToughRADIUS是一个开源的Radius服务软件&#xff0c;采用于 Apache License 2.0 许可协议发布&#xff0c;从创立之日起&#xff0c;他的宗旨就是服务于中小微ISP&#xff0c;让运营变得更简单。 T…

转:Jmeter 用户思考时间(User think time),定时器,和代理服务器(proxy server)...

在负载测试中需要考虑的的一个重要要素是思考时间&#xff08;think time&#xff09;&#xff0c; 也就是在两次成功的访问请求之间的暂停时间。 有多种情形挥发导致延迟的发生&#xff1a; 用户需要时间阅读文字内容&#xff0c;或者填表&#xff0c;或者查找正确的链接等。未…

linux sql语句传参数,Linux/Unixshell参数传递到SQL脚本

在数据库运维的过程中&#xff0c;Shell 脚本在很大程度上为运维提供了极大的便利性。而shell 脚本参数作为变量传递给SQL以及SQL脚本也是DB在数据库运维的过程中&#xff0c;Shell 脚本在很大程度上为运维提供了极大的便利性。而shell 脚本参数作为变量传递给SQL以及SQL脚本也…

Myeclipse5.5获取注册码

2019独角兽企业重金招聘Python工程师标准>>> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class MyEclipseGen {private static final String LL "Decompiling this copyrighted software is a vi…

对互联网中常见地图的坐标系探讨

文章版权由作者李晓晖和博客园共有&#xff0c;若转载请于明显处标明出处&#xff1a;http://www.cnblogs.com/naaoveGIS/。 1.背景 目前项目中使用百度地图、高德地图、谷歌中国地图、天地图的需求越来越多&#xff0c;这里我跟大家一起对各地图使用的坐标系做一个简单的探讨。…

讯飞输入法有没有Linux,Debian testing 安装讯飞输入法 - Linux系统与应用 - LinuxApp - 水木社区...

突然发现Deepin发行版带有讯飞输入法&#xff0c;于是折腾了一会&#xff0c;安装好了这个输入法&#xff0c;现把安装过程分享如下&#xff1a;软件包的依赖&#xff1a;Package: iflyimeVersion: 0.9.962Section: develPriority: optionalArchitecture: amd64Depends: libboo…

HTTP必知必会

2019独角兽企业重金招聘Python工程师标准>>> HTTP消息HTTP请求消息HTTP响应消息消息首行请求行响应行消息头部请求头请求头消息正文请求正文响应正文Web服务器把接收到的HTTP请求消息封装成request对象&#xff0c;作为service的参数传入service函数&#xff0c;ser…

更新10_linux,时隔十年,QQ更新了Linux版本

昨天1024程序员节&#xff0c;QQ悄悄地更新了QQ for Linux&#xff0c;也许是给各位一个惊喜吧。官网及其的简陋。和一个Word文档似的。十年一更&#xff0c;有网友称&#xff0c;瞬间回到QQ2006&#xff0c;确实界面功能有些落后&#xff0c;相信QQ可以跟上潮流的&#xff0c;…

C语言里if语句变量作为判断条件,C语言教学(九-上)if else判断语句

原标题&#xff1a;C语言教学(九-上)if else判断语句今天讲if else判断语句&#xff0c;简单理解就是进行条件判断&#xff0c;如果条件达到则执行if 里或else里的语句。先来看if。if的写法和for差不多,就是不用括号里的两个分号&#xff0c;if (条件) { }&#xff0c;if加括号…