組合自定義控件的步驟詳解

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.pswp.cn/news/458961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458961.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux如何建立隱藏目錄,【Linux】文件與目錄的默認權限與隱藏權限

01. 文件默認權限&#xff1a;umask文件的權限可以使用chmod來改變&#xff0c;但是我們默認創建文件的權限是什么&#xff1f;那就是與umask這個有關了。下來我們學習這個指令1.1 簡單使用umask[rootiZbp13q6hd8z3xaagcmz6gZ /]# umask0022[rootiZbp13q6hd8z3xaagcmz6gZ /]# u…

Servlet和JSP學習指導與實踐(二):Session追蹤

前言&#xff1a; web應用中經常需要對某些有用的信息進行存儲或者附加一些信息。本文主要介紹session&#xff0c;即“會話”跟蹤的幾種不同方式~ ----------------------------4種管理session的方式&#xff1a; 1.重寫url 通過在請求的url后面追加參數信息進行會話跟蹤。如&…

數據存儲和界面展示(二)

#測試 黑盒測試 測試邏輯業務 白盒測試 測試邏輯方法 根據測試粒度 方法測試&#xff1a;function test 單元測試&#xff1a;unit test 集成測試&#xff1a;integration test 系統測試&#xff1a;system test 根據測試暴力程度 冒煙測試&#xff1a;smoke test 壓力測…

linux在A目錄下創建B文件,Linux課程---5、常用文件命令和目錄命令(創建文件命令)...

Linux課程---5、常用文件命令和目錄命令(創建文件命令)一、總結一句話總結&#xff1a;touch file11、管道符|有什么用&#xff1f;將前一個命令的結果作為后一個命令的輸入&#xff1a;比如查看文件前3行&#xff1a;cat file1 | head -32、linux下如何復制粘貼命令是什么&…

window 系統上傳文件到linux 系統出現dos 格式換行符

Windows里的文件在Unix/Mac下打開的話&#xff0c;在每行的結尾可能會多出一個^M符號&#xff0c;Unix/Mac系統下的文件在Windows里打開的話&#xff0c;所有文字會變成一行&#xff0c;所以為了避免這種情況的發生&#xff0c;我們可以在linux系統內轉換格式 Centos系列可以直…

#pragma once與 #ifndef的區別

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 為了避免同一個文件被include多次 1 #ifndef方式2 #pragma once方式 在能夠支持這…

android學習者優秀網址推薦

非常漂亮的android UI庫集合&#xff0c;別人整理的&#xff0c;如果感覺不錯&#xff0c;趕快收藏吧&#xff01;&#xff01; https://github.com/wasabeef/awesome-android-ui https://github.com/Trinea/android-open-project android中文社區網 http://www.android-studio…

linux while read文件,linux shell腳本用while read逐行讀取文本的問題

問題:我現在是想用一個腳本獲取一定列表服務器的運行時間。首先我建立一個名字為ip.txt的IP列表(一個IP一行)&#xff0c;再建好密鑰實現不用密碼直接登錄。然后寫腳本如下&#xff1a;#!/bin/bashwhile read ips;doecho $ips;done < ip.txt腳本實現了逐行讀取列表中的IP&am…

常用字符串處理函數匯總

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** (一)strcmp函數 strcmp函數是比較兩個字符串的大小,返回比較的結果。一般形式是&…

兼容性記錄-class屬性

getAttribute獲得class屬性時,IE6,IE7的傳參是className,IE7和現代游覽器都是class全部游覽器DOMElement均有的className屬性,其在IE各版本號下的均表現良好返回屬性class值的字符串此外html5中DOMElement有個classList屬性,它返回一個類型為DOMTokenList的對象,它當中有非常多…

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…

[redis設計與實現][7]基本數據結構——對象

Redis對基礎數據類型進行了封裝&#xff0c;構建出上層的對象系統&#xff0c;這個系統包含&#xff1a;字符串對象、列表對象、哈希對象、集合對象和有序集合對象。 Redis對象結構&#xff1a; [cce lang”c”] typedef struct redisObject { //類型 unsigned type:4; //編碼 …

Linux中samba的權限詳解,活用三種權限 理解Samba的權限控制

在企業內網開發環境方面&#xff0c;文件服務器是一個非常重要的環節。在這當中&#xff0c;Samba服務器由于其權限控制的高度靈活性&#xff0c;在這里撫琴煮酒會進行一些列詳細的說明。之前我們已經介紹了Samba服務器一些入門和基本的更換用戶、端口監聽、列表控制等技巧&…

安卓基礎01

安卓基礎01SDK System images 這是在創建模擬器時需要的system image&#xff0c;也就是在創建模擬器時CPU/ABI項需要選擇的&#xff0c;下載并解壓后&#xff0c;將解壓出的整個文件夾復制或者移動到 your sdk 路徑/system-images文件夾下即可&#xff0c; 如果沒有 system-im…

C++存儲區域基礎概念詳解

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 以下詳解來自&#xff1a; http://blog.163.com/zb_075/blog/static/3734032820115110…

創建、修改、刪除表總結

一、創建表 CREATE TABLE <表名> &#xff08;<列名><數據類型>[列級完整性約束條件] [&#xff0c;<列名> <數據類型>[列級完整性約束條件]] … [&#xff0c;表級完整性約束條件]&#xff09;&#xff1b; 如果完整性約束條件涉及到該表的多個…

linux 編譯查看鏈接庫詳情,Linux環境下的編譯,鏈接與庫的使用

鏈接參數控制鏈接器中提供了-dn -dy 參數來控制使用的是動態庫還是靜態庫&#xff0c;-dn表示后面使用的是靜態庫&#xff0c;-dy表示使用的是動態庫例:g -Lpath -Wl,-dn -lx -Wl,-dy -lpthread 這樣如果在path路徑下有libx.so和libx.a這個時候只會用到 libx.a.注意在最后的地…

在C++中用虛函數的作用是什么? 為什么要用到虛函數?

***************************************************更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com***************************************************虛函數聯系到多態&#xff0c;多態聯系到繼承。所以本文中都是在繼承層次上做文章。沒了繼…