2015/03/16         星期一

在Android平台下编写客户端程序,界面只有开关若干个。

代码更新与3.17号

mainActivity.java:

package com.fan.myapp;

import android.app.Activity;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.os.Bundle;

import android.view.View;

import android.widget.ImageView;

import android.widget.Switch;

import android.widget.TextView;

import android.widget.CompoundButton;

import android.widget.CompoundButton.OnCheckedChangeListener;

import android.widget.Toast;

public class MainActivity extends Activity {

       private TextView mTestView;

       private Switch mLightSwitch1;

       private Switch mLightSwitch2;

       private ImageView mLight;

       boolean isChanged = false;

       SharedPreferences store_light2;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //显示开关动作状态

        mTestView = (TextView)findViewById(R.id.test1);

        //设置Switch开关

        mLightSwitch1 = (Switch)findViewById(R.id.switch1);

        mLightSwitch2 = (Switch)findViewById(R.id.switch2);

        //设置图片开关

        mLight = (ImageView)findViewById(R.id.lightShow);

              //保存开关信息                  

        //得到配置参数的类 ,参数1 配置参数文件的名字,没有后缀名 ,参数2 文件访问模式 MODE_PRIVATE只能是生成这个文件的应用访问

              SharedPreferences store_light1 = getSharedPreferences("light",MODE_PRIVATE);      //数据只能被本应用程序读、写

              final Editor editor = store_light1.edit();      // 使用匿名内部类,隐式调用外部变量,外部变量需要final修饰。

        //读取配置信息中保存的的开关状态

        SharedPreferences share_light = getSharedPreferences("light", MODE_PRIVATE);

        String lightshare1 = share_light.getString("lightSwitch1", "");    //根据key寻找值 参数1 key 参数2 如果没有value显示的内容 

        String lightshare2 = share_light.getString("lightSwitch2", "");   

        String imageshare = share_light.getString("imageSwitch", "");     

        Toast.makeText(this, "light1:" + lightshare1 + "\n" + "light2:" + lightshare2 + "\n" + "image:" + imageshare + "\n" ,

        Toast.LENGTH_LONG).show();

        if(lightshare1.equals("on")){    //判断开关的状态,注意不是用“==”直接比较

              mLightSwitch1.setChecked(true);    

        }

              if(lightshare2.equals("on")){     //判断开关的状态

              mLightSwitch2.setChecked(true);    

        }

              if(imageshare.equals("on")){             //判断图片状态

                     mLight.setImageDrawable(getResources().getDrawable(R.drawable.light_on));

                     isChanged = true;

              }

        mLightSwitch1.setOnCheckedChangeListener(new OnCheckedChangeListener() { //监听开关1的动作

              boolean lightSwitch1 = false;           

              @Override

              public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){

                     if(isChecked){

                           //开启mLightSwitch1

                           mTestView.setText(getString(R.string.light1_on));

                           lightSwitch1 = true;

                     } else {

                           //关闭mLightSwitch1

                           mTestView.setText(getString(R.string.light1_off));

                           lightSwitch1 = false;

                     }

                     if(lightSwitch1){                                        

                           editor.putString("lightSwitch1", "on");  //存储配置 参数1 是key 参数2 是值

                           editor.commit();//提交刷新数据

                     } else {

                           editor.putString("lightSwitch1", "off");

                           editor.commit();

                     }

              }

        });

        mLightSwitch2.setOnCheckedChangeListener(new OnCheckedChangeListener(){

              boolean lightSwitch2 = false;

              @Override

              public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){

                     if(isChecked){

                           //开启mLightSwitch2

                           mTestView.setText(getString(R.string.light2_on));

                                  lightSwitch2 = true;

                     } else {

                           //关闭mLightSwitch2

                           mTestView.setText(getString(R.string.light2_off));

                                  lightSwitch2 = false;

                     }

                           if(lightSwitch2){                                        

                           editor.putString("lightSwitch2", "on");  //存储配置 参数1 是key 参数2 是值

                           editor.commit();//提交刷新数据

                     } else {

                           editor.putString("lightSwitch2", "off");

                           editor.commit();

                     }

              }            

        });       

        mLight.setOnClickListener(new View.OnClickListener(){

              @Override

              public void onClick(View v){

                     if(v == mLight){

                           if(isChanged){       //若isChanged当前状态是true,灯亮,则点击图片后变为灯灭。

                                  mLight.setImageDrawable(getResources().getDrawable(R.drawable.light_off));

                                         mTestView.setText(getString(R.string.imageLight_off));

                                         editor.putString("imageSwitch", "off");  //存储配置 参数1 是key 参数2 是值

                           editor.commit();//提交刷新数据

                           } else {

                                  mLight.setImageDrawable(getResources().getDrawable(R.drawable.light_on));

                                         mTestView.setText(getString(R.string.imageLight_on));

                                         editor.putString("imageSwitch", "on");

                           editor.commit();

                           }

                           isChanged = !isChanged;

                     }

              }

        });

    }

}

Main.xml:

<RelativeLayout xmlns: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"

    tools:context="${relativePackage}.${activityClass}" >

    <Switch

        android:id="@+id/switch1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/switch2"

        android:layout_alignParentTop="true"

        android:layout_marginTop="45dp" />

    <Switch

        android:id="@+id/switch2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentRight="true"

        android:layout_below="@+id/switch1"

        android:layout_marginRight="25dp"

        android:layout_marginTop="45dp" />     

    <TextView

        android:id="@+id/light1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_alignTop="@+id/switch1"

        android:layout_marginLeft="30dp"

        android:text="@string/Light1" />

    <TextView

        android:id="@+id/light2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/light1"

        android:layout_alignTop="@+id/switch2"

        android:text="@string/Light2" />

    <TextView

        android:id="@+id/test1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:text="@string/NULL" />

    <TextView

        android:id="@+id/light"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginLeft="40dp"

        android:layout_marginTop="290dp"

        android:text="@string/Light" />

    <ImageView

        android:id="@+id/lightShow"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignRight="@+id/switch2"

        android:layout_below="@+id/test1"

        android:layout_marginRight="26dp"

        android:layout_marginTop="28dp"

        android:src="@drawable/light_off" />

</RelativeLayout>

String.xml:

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

<resources>

<string name="app_name">myapp</string>

<string name="hello_world">Hello world!</string>

<string name="Light1">Light1</string>

<string name="Light2">Light2</string>

<string name="Light">Light</string>

<string name="light1_on">light1 is on.</string>

<string name="light1_off">light1 is off.</string>

<string name="light2_on">light2 is on.</string>

<string name="light2_off">light2 is off.</string>

<string name="imageLight_on">imageLight is on.</string>

<string name="imageLight_off">imageLight is off.</string>

<string name="NULL">NULL</string>

</resources>

3.16完成情况:

3.17完成情况:

主要是完成了配置信息(即开关状态)的存储。

使用HTML5开发客户端应用:

Html5代码:

<!DOCTYPE
html>

<html>

<head>

<meta
charset="utf-8" />

<title>毕业设计</title>

</head>

<body>

<p>light1:<img
src="img/light_off.png" onclick="change(this)"/></p>

</body>

<script
type="text/javascript">

var ischecked =
false;

function
change(obj){

if(ischecked){

obj.src="img/light_off.png";

}
else {

obj.src="img/light_on.png";

}

ischecked
= !ischecked;

}

</script>

</html>

2015/03/17         星期二

完成开关和图片开关的配置信息保存,主要使用SharedPreferences。

除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。实现SharedPreferences存储的步骤如下:

  一、根据Context获取SharedPreferences对象

  二、利用edit()方法获取Editor对象。

  三、通过Editor对象存储key-value键值对数据。

  四、通过commit()方法提交数据。

sadfa的更多相关文章

  1. Linux shell入门基础(二)

    二.shell对文本的操作 01.查看文本的命令 #cat /etc/passwd(并非对文本文件操作) #tail -5 /etc/passwd(查看末尾5行) #tail -f /var/log/ ...

  2. python_11 装饰器,闭包

    装饰器:本质就是函数,功能是为其他函数添加附加功能 原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 #装饰器: def tim ...

  3. flask框架--cookie,session

    今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...

  4. python-day16

    一.正则表达式 regular expression -----regex 验证匹配正则表达式使用单个字符串来描述.匹配一系列匹配某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替 ...

随机推荐

  1. IOS 学习笔记 2015-04-15 控制器数据反向传值

    // // FirstViewController.h // 控制器数据传递 // // Created by wangtouwang on 15/4/15. // Copyright (c) 201 ...

  2. MySQL分库分表备份脚本

    MySQL分库备份脚本 #脚本详细内容 [root@db02 scripts]# cat /server/scripts/Store_backup.sh #!/bin/sh MYUSER=root M ...

  3. Javascript执行环境、作用域链

    执行环境 可以把执行环境想象为一个圆圈,里面包含了一些变量.函数. 执行环境定义了变量或函数的有权访问的其他数据,决定了它们各自的行为.还有一个顶部执行环境.在浏览器中,顶部执行环境既为window, ...

  4. Extjs发票管理系统

    技术特点:Extjs框架,三层架构,Ajax,json 1.仿office2007菜单.介面美观大方,可动态更改皮肤保存至cookie. 2,json数据源与实体类的相互转换. 3.可下载桌面版登录方 ...

  5. DIV+CSS 网页布局之:三列布局

    1.宽度自适应三列布局 三列布局的原理和两列布局的原理是一样的,只不过多了一列,只需给宽度自适应两列布局中间再加一列,然后重新计算三列的宽度,就实现了宽度自适应的三列布局. 同样的道理,更多列的布局, ...

  6. mac下Apache + MySql + PHP网站开发

    最近接了个小活,做一个使用PHP语言和MySql数据库的动态网站.之前做过类型的网站,是在windows系统下做的,开发环境使用的是 AppServ 的PHP开发套件.现在有了我的大MAC,所以找了M ...

  7. 前端工程的构建工具对比 Gulp vs Grunt

    1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Maven.Node催生了一批自动化工 ...

  8. C++有关类的符号总结

    因为我先学习的java,尽管c++与java在类声明与使用上很相似,但是看到c++的源码还是有一些符号不太明白..现在就用一个例子总结一下: #include <iostream> cla ...

  9. JS实现精确加减乘除

    说明:项目中要使用 JS 实现自动计算的功能,进行一些浮点数运算时,计算结果却是一长串的值,这里提供一个解决方法,问题基本上可以解决. 具体代码如下: //加法函数 function accAdd(a ...

  10. C#之装箱与拆箱

    C#中值类型和和引用类型实质上是同源的,所以不但可以从值类型和引用类型之间进行转换,也可以在值类型和引用类型之间进行转换.,但是两者使用的内存类型不同,使他们的转换变得复杂. 1.装箱: 在C#中通常 ...