zoukankan      html  css  js  c++  java
  • 在Android初次的前期学习中的十二个小例子(附案例下载)

    目录(点击标题即可下载):
     
    一、新建DemoActivity:
    1. 在res/layout/下新建activity_demo.xml
    2. 在manifests/文件夹下的AndroidManifest.xml注册(可使用Alt+Enter快捷方式)
    3. 新建DemoActivity继承Activity,并覆写onCreate(),在里面添加setContentView指向资源文件夹下的DemoActivity
    二、使用匿名类设置事件监听     
    1. findViewById()找到View资源,设置监听。调用View对象的一个方法setOnClickListener,该方法的参数为OnClickListener,但是该方法是一个接口,需要重写方法onClick。
    三、使用Intent跳转不同的Activity
    Intent intent = new Intent(MainActivity.this, DemoActivity.this);
    startActivtiy(intent);
     

     
    一、对Button注册鼠标点击事件
    二、使用Intent实现点击操作的事件:打开指定网页、打开相机、打开电话页面、设置无线网等等。
    //打开百度网页
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("http://www.baidu.com"));
    startActivity(intent);

    Hello3:点击监听事件集中处理

    一、通过findViewById()找到View资源,封装成findView()函数
    二、对View资源设置点击监听器setOnClickListener,封装成setListener()函数
    三、实现View.OnClickListener接口,并覆写onClick()方法.
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.helloWorld1:
                Log.i("textView1","helloWorld1");
                break;
            case R.id.helloWorld2:
                Log.i("textView2","helloWorld2");
                break;
         }
    }

    Hello4:登录注册界面布局

      使用RelativeLayout布局界面
     
    一、使用RelativeLayout布局界面,将彩虹放在中央,android:layout_centerInParent="true"。
    二、使用LinearLayout布局将View垂直放置,android:orientation="vertical"。
     

      使用RelativeLayout作为整体布局,分别用LinearLayout布局放置线性布局,用RelativeLayout布局放置相对布局。
     
      三类常用监听事件:View.OnLongClickListener、View.OnClickListener、View.OnFocusChangeListener
    一、封装findViewById()找到对应的View资源
     
    二、封装setListener()注册监听事件:长按事件、点击事件、焦点改变事件。
     
    三、实现对应的监听接口,关键词implements
     
    四、重写onClick()方法、onLongClick()方法、onFocusChange()方法和afterTextChanged()方法。
     
    五、添加消息提示:Toast.makeText(this,"长按按钮-点击",Toast.LENGTH_SHORT).show();
     
    1. 新建Activity视图为activity_item.xml,进行页面布局并添加ListView
    2. 新建Activity的子类显示activity_item资源,并在manifests里面注册
    3. 新建ListAdpter继承BaseAdapter,并覆写主要的方法:getCount()和getView()
    4. 在ListAdpter添加List<String>对象,这是ListView的视图来源,在覆写getView()的方法时,使用LayoutInflater的inflater()方法将activity_item填充并可以设置TextView的文本。
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View view1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_item,viewGroup,false);
        TextView textView = view1.findViewById(R.id.text);
        textView.setText(mData.get(i));
        return view1;
    }

    Hello9:UI线程与非UI线程之间的消息传递Handler

      线程安全机制:只有创建UI的线程能更改UI,并且UI线程不能进行耗时操作。
     
    一、子线程进行耗时操作,操作完成后,使用Handler或Handler的子类的sendEmptyMessage()方法
     
    private void download() {
        Runnable runnable = new Runnable() {
        @Override
        public void run() {
        try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            mHandler.sendEmptyMessage(1);
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }
    二、主线程完成Handler的对象建立,并覆写回调函数handleMessage()方法操作UI
     
    mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
        if (msg.what == 1){
            mBtDownload.setText(R.string.downloaded);
            }
        }
    };

    Hello10:使用SharedPerferences保存用户的“偏好设置”

    一、获取SharedPerferences和editor的对象并设置权限等级(私有权限:Context.MODE_PRIVATE)
    sharedPreferences = getSharedPreferences("count", Context.MODE_PRIVATE);
    editor = sharedPreferences.edit();

    二、向空间中添加键值对:

    editor.putInt("count",count);
    editor.apply();
    三、取出空间中持久化的键值对:
    count = sharedPreferences.getInt("count",0);
    优点:简单易用。
    缺点:效率比较低,不能存储大量数据和复杂数据结构。
     
    一、输入输出流都是相对于内存来说的
      1. 写入文件,是从内存到文件,则是出去,即FileOutputStream
      2. 读取文件,是从文件到内容,则是进来,即FileInputSteam
    二、Android文件的四种操作模式
    FileOutputStream = openFileOutput(name,mode) 应用程序的数据文件夹下的文件对应的输入流
    name为文件名,mode为Android文件的四种操作模式之一:
      1. Context.MODE_PRIVATE 默认操作模式,私有数据(只能应用本身访问),写入文件会被覆盖
      2. Context.MODE_APPEND 检验文件是否存在,存在就追加内容,不存在就先新建文件再添加内容
      3. Context.WORLD_READABLE 可以被其他应用读取
      4. Context.WORLD_WRITABLE 可以被其他应用写入
      5. 既可读又可写:Context.WORLD_READABLE + Context.WORLD_WRITABLE
    三、写入文件
      1. 获取内存写入输出流fileOutputSteam,使用openFileOutput(fileName,mode)
      2. 字符串转换为字节数组,注意编码格式,默认getBytes()编码为UTF-8
      3. 写入,使用fileOutputSteam.write(),注意捕获异常
    private void writeFile() {
        FileOutputStream fileOutputStream = null;
        try {
            fileName = mEtName.getText().toString();
            fileContext = mEtContent.getText().toString();
            fileOutputStream = openFileOutput(fileName, MODE_APPEND);     //1.获取内存输出流fileOutputSream
            fileOutputStream.write(fileContext.getBytes());               //2.字符串转换为字节数组
            Toast.makeText(this,"写入完成!",Toast.LENGTH_SHORT).show();
        } catch (java.io.IOException e) {
            e.printStackTrace();
            Toast.makeText(this,"捕获IO异常!",Toast.LENGTH_SHORT).show();
        } finally {
            try {
            if (fileOutputStream!=null)
                fileOutputStream.close(); //无论捕获异常还是正常执行,都需要关闭fileOutputStream
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    四、读取文件
    将文件读取到内存中,使用输入流FileInputStream
      1. 获取内存输入流:使用openFileInput()方法
      2. 获得字节数组:定义字节数组用于暂时保存数据,使用fileInputStream.read(bytes)方法获取,返回值为字节数组的大小size。
      3. 获得字符串:使用new String(bytes)的方法将字节数组转换为字符串,注意编码格式,默认编码格式为UTF-8。在使用中需要用完整填充的字节数组,所以这里还需要新定义一个刚好为size的字节数组用于正确地转换为字符串。
    private void readFile() {
        FileInputStream fileInputStream = null;
        try {
            fileName = mEtName.getText().toString();
            fileInputStream = openFileInput(fileName); //1.获取内存输入流
            byte[] bytes = new byte[1024];
            int size = fileInputStream.read(bytes);          //2.读入字节数组
            byte[] data = new byte[size];
            System.arraycopy(bytes,0,data,0,size);          //3.转换为字符串,注意编码格式
            String str = new String(data);
            textView.setText(str);
            Toast.makeText(this,"读取完成!",Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this,"文件没有找到!",Toast.LENGTH_SHORT).show();
        } finally {
            try {
                if (fileInputStream != null)
                    fileInputStream.close();
            } catch (IOException e) {
                    e.printStackTrace();
            }
        }
    }

    一、内部存储(InternalStorage)与外部存储(ExternalStorage)
      1. 内部存储与外部存储是相对于应用程序来说的,内部存储是应用程序私有的,可设置对可外访问。
      2. 内部存储主要用于存储应用的临时数据,空间十分有限,应用卸载时,该目录文件也被删除。
    二、内部存储目录:data/data/包名
    内部存储位置
    存放数据类型
    访问方法
    data/data/包名/shared_prefs 
    SharedPreferences将数据持久化到xml文件存放的目录
     
    data/data/包名/databases  
    数据库文件存放的目录
     
    data/data/包名/files 
    普通数据存放的目录
    context.getFilesDir()
    data/data/包名/cache
    缓存文件存放的目录
    context.getCacheDir()
     
    三、mnt或storage外部存储
    1.判断外部存储是否可用 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
    外部存储分类
    外部存储详细目录
    使用方法
    公共目录
    十大公共目录
    Environment.getExternalStorageDirectory().getPath()
    私有目录
    storage/sbcard/Android/data/包名/files
    getExternalFilesDir()
    storage/sbcard/Android/data/包名/cache
    getExternalCacheDir()
     
    2.有包名的路径都是调用Context中的方法获取,没有包名的路径都是通过Environment中的方法获取
     
    四、补充
    (1) 关于各种storage外部存储的路径:   
            其中sdcard/、mnt/sdcard、storage/sdcard0、storage/emulated/0、storage/emulated/legacy都是同一个路径的不同“指针”,指向的是同一个地方,只是不同Android版本的叫法不一样。如果大家想了解每个版本的外部存储路径,同学们可以通过获取getExternalStorageDirectory方法的打印结果进行对比。
     
    (2)清除缓存与清除数据
      1. 清除缓存:APP运行过程产生的临时数据,为内部存储文件。
      2. 清除数据:内部存储/data/user/0/packname/和外部存储/storage/emulated/0/Android/data/packname/下的文件里面的数据会全部删除,包括cache,files,lib,shared_prefs等等。
    (3)补充总结
      1. /data目录下的文件物理上存放在我们通常所说的内部存储里面 ,一般用于临时数据,比如头像,密钥文件(隐私,空间有限)。
      2. /storage目录下的文件物理上存放在我们通常所说的外部存储里面 ,裁剪用于文件保存,上传头像(空间比较大)。
      3. /system用于存放系统文件,/cache用于存放一些缓存文件,物理上它们也是存放在内部存储里面的
    描述
    代码
      获取内部存储的根路径
    Environment.getDataDirectory() = /data  
      获取外部存储的根路径
    Environment.getExternalStorageDirectory().getAbsolutePath() = /storage/emulated/0 
      系统的内部存储
    Environment.getDownloadCacheDirectory() = /cache 
    Environment.getRootDirectory() = /system 
    (4)友情链接:
      1.  彻底了解android中的内部存储与外部存储  https://www.cnblogs.com/jingmo0319/p/5586559.html
      2. 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑 https://blog.csdn.net/u010937230/article/details/73303034/ 
      3. Android存储扩展学习-----应用的清除数据和清除缓存 https://blog.csdn.net/oudetu/article/details/78664514  
  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/jdemarryme/p/9286037.html
Copyright © 2011-2022 走看看