<html>

因为手机安全卫士每次打开都要进行检查软件版本号的工作,久而久之会浪费用户的流量。因此,我们要在设置页面中,由用户自己确认是否须要开启检查更新的操作。

效果图:
这里写图片描写叙述

技术点:
1.自己定义组合控件
2.SharedPreferences的读写操作

自己定义组合控件
和之前自己定义风格的原因一样,都是为了降低工作量。因为该组合控件会有非常多地方要用到,因此,我们把它抽取出来,封装在一个类中。须要使用的时候直接调用就可以。

一劳永逸。

思路:

  • 创建一个布局文件。包含两个TextView,一个CheckBox如效果图的形式进行布局。
  • 创建一个类,继承自RelativeLayout(假设布局是採用线性布局,则继承自LinearLayout)
  • 自己定义组合控件的属性

1.布局文件:
setting_item_layout.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="wrap_content">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:text="是否自己主动更新"
        android:textSize="30dp"
        android:textColor="#000"
        android:id="@+id/tv_setting_item_title"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:text="已经开启自己主动更新"
        android:textSize="24dp"
        android:id="@+id/tv_setting_item_content"
        android:layout_below="@id/tv_setting_item_title"
        />
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="20dp"
        android:id="@+id/cb_setting_item"
        />
    <View
        android:layout_width="match_parent"
        android:layout_height="0.3dp"
        android:layout_marginTop="10dp"
        android:background="#33000000"
        android:layout_marginBottom="10dp"
        android:layout_below="@id/tv_setting_item_content"
        />
</RelativeLayout>

2.自己定义控件属性:
(1)创建一个自己定义的命名空间:
xmlns:mobilesafe=”http://schemas.android.com/apk/res/包名”
(2)在values/styles 文件里加入例如以下代码:

 <declare-styleable name="SettingItemView">
        <attr name="content_on" format="string" />
        <attr name="content_off" format="string" />
        <attr name="title" format="string" />
    </declare-styleable>

(3)在代码中,做例如以下操作:

  • 载入布局
    View.inflate(Context ResourceID ViewGroup)
  • 初始化控件(findViewById)
  • 获取布局文件上的属性值
title = attrs.getAttributeValue(NAMESPACE,"title");
content_on = attrs.getAttributeValue(NAMESPACE,"content_on");
content_off = attrs.getAttributeValue(NAMESPACE,"content_off");

`
     - 依据自己的实际开发需求,设置一些属性:
 public void setChecked(boolean isChecked)
    {
        if(isChecked)
        {
            cb.setChecked(true);
            setContent(content_on);
        }
        else
        {
            cb.setChecked(false);
            setContent(content_off);
        }
    }

    public boolean isChecked()
    {
        return cb.isChecked();
    }

    private void setContent(String content)
    {
        tvContent.setText(content);
    }
在SettingActivity的布局文件里。加入例如以下控件:
<com.vincentliong.mobilesafe0722.ui.SettingItemView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    mobilesafe:title="是否开启自己主动更新"
    mobilesafe:content_on="自己主动更新已开启"
    mobilesafe:content_off="自己主动更新已关闭"
    android:id="@+id/settingitem_setting_update"
    />

然后。在SettingActivity中,创建自己定义控件对象,并进行对应的操作

if(isChecked)
        {
            mSivUpdate.setChecked(true);
        }
        else
        {
            mSivUpdate.setChecked(false);
        }
        mSivUpdate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v)
            {
                if(mSivUpdate.isChecked())
                {
                    mSivUpdate.setChecked(false);
                    editor.putBoolean("autoUpdate",false);
                }
                else
                {
                    mSivUpdate.setChecked(true);
                    editor.putBoolean("autoUpdate",true);
                }
                editor.commit();
            }
        });

最后,在SplashActivity中加入推断操作,当SharedPreferences中的antoUpdate值为true时再运行自己主动更新操作,否则,直接进入主页面。
搞定! 

版权声明:刚出锅的原创内容,希望对你有帮助~ 举报
  • 本文已收录于下面专栏:

相关文章推荐

Android怎样实现APP自己主动更新

先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞但是一点都不夸张,比方小米。魅族,百度,360。机锋,应用宝等等,当我们想上线一款新版本号APP时。先不说渠道打包的...
  • Derbe
  • Derbe
  • 2016-11-17 11:02
  • 3953

Android中关于APP的版本号更新问题

Android中关于APP的版本号更新问题

Android开发版本号更新及自己定义通知具体解释

本文将从下面几个方面具体解释Android开发版本号更新及自己定义通知的那些坑。

Service下载文件要注意的小细节 Android高版本号通知图标无法显示(出现白框) 通知图标仅仅能显示中间的一部分。无法显示...

Android实战之app版本号更新升级全文章(一)

转自:http://blog.csdn.net/u013278099/article/details/52692008  尊重原创! 前言 本文将解说app的升级与更新。

一般而言用户使用A...

Android Recovery升级原理

Android Recovery升级原理 声明 摘要 Recovery相关概念 Android系统的启动模式 1 Android 各个分区介绍 2 Android的启动模式 3 怎样进入Recover...

android实现自己主动更新

Android应用自己主动更新 我们看到非常多Android应用都具有自己主动更新功能。用户一键就能够完毕软件的升级更新。得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,以下我们就来...

android各个版本号的名称和更新

命名规则   Android 用甜点作为它们系统版本号的代号的命名方法開始于 Andoird 1.5 公布的时候。作为每一个版本号代表的甜点的尺寸越变越大。然后依照26个字母数序:纸杯蛋糕,甜甜圈。松...

Android中的app升级逻辑(非热更新)

Android中的app升级逻辑(包括强制升级的逻辑)

Android APP 增量更新demo

随着如今手机硬件不断的提升,分辨率提高手机的安装包也是越来越大了。

当年NOKIA,MOTO时代,一个手机APP假设有1MB那都是算大的,2MB已经不得了了。

尽管网络、存储都已经大大提升。可是流量还不至...

手机安全卫士开发系列(5)——自己主动更新

新建一个MainActivity package com.meritit.mobiesafe.ui; import com.meritit.mobiesafe.R; import android....
  • 微博
    微信
    QQ
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多仅仅同意输入30个字)

posted @ 2017-08-21 12:49  gccbuaa  阅读(583)  评论(0编辑  收藏  举报