文档章节

仔仔手机安全卫士demo(四)

A
 Angels_安杰
发布于 2015/10/18 22:01
字数 785
阅读 21
收藏 0

imageimage

需求:实现如上功能,用户可自由选择是否自动更新app,当选择时,提示自动更新已开启,当取消是,显示自动更新已关闭,只要点击设置自动更新字样或者选项按钮,均可选择。

接下来,使用自定义标签实现

第一步:在res/values/下创建一个attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="SettingItemView">
        <attr name="mytitle" format="string" />
        <attr name="description_on" format="string" />
        <attr name="description_off" format="string" />
    </declare-styleable>
</resources>
注意:属性的名称不能与android中已定义的名称重复,否则会抛出属性名已定义的异常
由于使用的是android studio,在前面一篇文章有提到eclipse与android studio在开发自定义标签时的区别
在使用到自定义标签的布局文件中加入该命名空间
xmlns:zaizai=http://schemas.android.com/apk/res-auto
如我再activity-setting.xml中使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:zaizai="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="55dip"
        android:background="@android:color/holo_green_dark"
        android:gravity="center"
        android:text="设置中心"
        android:textColor="@android:color/black"
        android:textSize="22sp" />

    <com.zaizai.safty.ui.SettingItemView
        zaizai:mytitle="设置自动更新"
        zaizai:description_on="设置自动更新已经开启"
        zaizai:description_off="设置自动更新已经关闭"
        android:id="@+id/siv_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
自定义标签里的布局文件为
<?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="70dip"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="5dip"
        android:layout_marginTop="10dip"
        android:textColor="@android:color/black"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_title"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="5dip"
        android:textColor="@android:color/black"
        android:textSize="12sp" />

    <CheckBox
        android:id="@+id/cb_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dip"
        android:clickable="false" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="0.2dip"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="5dip"
        android:background="#000000"
        android:keyTextColor="@android:color/black" />

</RelativeLayout>
注意:<checkBox 一定要将其clickable置为false,使其失去被点击能力
因为CheckBox的点击事件的优先级大于TextView,如果不使其失去被点击的能力,那么当点击CheckBox的时候,自定义控件的其他组件将接收不到点击事件
自定义控件所属的类文件为
package com.zaizai.safty;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;

import com.zaizai.safty.ui.SettingItemView;

/**
 * 设置中心类文件
 * Created by zaizai on 2015/10/14.
 */
public class SettingActivity extends Activity {

    private SettingItemView siv_update;
    /*用来存储设置文件*/
    private SharedPreferences preferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_setting);

        siv_update = (SettingItemView) this.findViewById(R.id.siv_update);
        preferences = getSharedPreferences("config",MODE_PRIVATE);
        boolean update_status = preferences.getBoolean("update", false);
        if (update_status) {
            /*自动升级已经开始*/
            siv_update.setChecked(true);
            /*siv_update.setDescription("自动升级已经开启");*/
        } else {
            /*自动升级已经关闭*/


            siv_update.setChecked(false);
            /*siv_update.setDescription("自动升级已经关闭");*/
        }
        siv_update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = preferences.edit();

                /*判断是否选中,调用自定义的函数*/
                if (siv_update.isChecked()) {
                    //自动升级已被选中,再次点击应该将其置为false
                    siv_update.setChecked(false);
                   /* siv_update.setDescription("自动升级已经关闭");*/
                    editor.putBoolean("update", false);
                } else {
                    //没有打开自动升级
                    siv_update.setChecked(true);
                    /*siv_update.setDescription("自动升级已经开启");*/
                    editor.putBoolean("update", true);
                }
                editor.commit();
            }
        });
    }
}
如上便完成了一个自定义更新控件

© 著作权归作者所有

共有 人打赏支持
A
粉丝 5
博文 138
码字总数 105958
作品 0
广州
程序员
私信 提问
仔仔手机安全卫士demo(一)

第一步:设计splash页面,即进入主页面前的一个欢迎页面 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool......

Angels_安杰
2015/10/13
21
0
仔仔手机安全卫士demo(三)

由于前两天忙于学校的实习,就断了两三天没有学习android,今天实习结束,又可以继续了。 下面我将给出进入主页面的entryHome函数的实现以及使用gridView布局功能界面 entryHome函数实现 /*...

Angels_安杰
2015/10/03
89
0
仔仔安全卫士demo(二)

第一步:启动tomcat,在tomcat中加入如下json文件 {"version":"2.0","description":"我是最新的,来下载我把","apkurl":"http://192.168.1.103:8080/zaizaimobilesafe-2.0.apk"} 第二步:实现......

Angels_安杰
2015/10/13
37
0
360移动技术开放日 聚焦移动前沿技术(有福利)

在手机已经成为我们时刻离不开的生活必需品的今天,移动开发技术变得尤为重要。 本期360互联网技术训练营邀请360顶尖Android团队与快手的特邀嘉宾分别从APP性能监控、组件化,以及AR、特效方...

ZVAyIVqt0UFji
2018/08/23
0
0
汪仔重出江湖开挂撒币大战 引画风突变

  【IT168 资讯】“撒币”、“瓜分百万奖金”、“直播答题”……2018 刚开年,互联网行业又出现一个新玩法,短短十几天内,四五个直播答题软件相继火了:王思聪投资的 “冲顶大会”,映客推...

it168网站
2018/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
15分钟前
1
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
33分钟前
1
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
33分钟前
0
0
oracle dg备库重建redolog:ora-00313,ora-00312

trace文件: Errors in file /crbank/dbs/app/product/diag/rdbms/rdbs/dbs/trace/dbs_mrp0_24445130.trc: ORA-00313: open failed for members of log group 8 of thread 1 ORA-00312: onl......

hnairdb
47分钟前
1
0
深入分析Java I/O的工作机制 (一)

1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合,类库包括接口、抽象类、具体类等。 I/O是机器获取和交互信息的主要渠道。 java在I/O上也一直在做持续的优化,在1.4版开始...

java菜分享
56分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部