Android开发之项目经验分享

作者: YungFan | 来源:发表于2016-05-19 19:39 被阅读1434次

在Android开发中,除了基本的理论知识,还需要将所学知识运用到真实的项目中,在项目中锻炼自己的分析问题、解决问题的能力,本文将总结一下本人项目中遇到的一些问题,总结成章,与大家共勉~~~

1、如何拉伸一个图片为一条线

项目需求:需要在布局中设置一条分割线,该分割线需要自定义,美工也给了一张图片,那么如何实现?

在drawable目录下创建一个repeat.xml:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
                 android:src="@drawable/bg" 
                 android:tileMode="repeat" /> 

然后在布局的xml文件中可以这样引用:

<LinearLayout 
            android:layout_width="fill_parent" 
            android:layout_height="1px" 
            android:background="@drawable/repeat" > 
</LinearLayout> 
2、图片在SQLite中的存取

(1)存储Drawable对象到数据库

//第一步,将Drawable对象转化为Bitmap对象

Bitmap bmp = (((BitmapDrawable)tmp.image).getBitmap());

//第二步,声明并创建一个输出字节流对象

ByteArrayOutputStream os = new ByteArrayOutputStream();

//第三步,调用compress将Bitmap对象压缩为PNG格式,第二个参数为PNG图片质量,第三个参数为接收容器,即输出字节流os

bmp.compress(Bitmap.CompressFormat.PNG, 100, os);

//第四步,将输出字节流转换为字节数组,并直接进行存储数据库操作,注意,所对应的列的数据类型应该是BLOB类型

ContentValues values = new ContentValues();

values.put("image", os.toByteArray());

db.insert("apps", null, values);

db.close();
过程总结

Drawable→Bitmap→ByteArrayOutputStream→SQLite

(2)从数据库读取图片

//第一步,从数据库中读取出相应数据,并保存在字节数组中
byte[] blob = cursor.getBlob(cursor.getColumnIndex("image"));

//第二步,调用BitmapFactory的解码方法decodeByteArray把字节数组转换为Bitmap对象

Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);

//第三步,调用BitmapDrawable构造函数生成一个BitmapDrawable对象,该对象继承Drawable对象,所以在需要处直接使用该对象即可

BitmapDrawable bd = new BitmapDrawable(bmp);
总结思路为

SQLite→byte[]→Bitmap→BitmapDrawable

3、修改 EditText.setError("Info"); 的字体颜色

在 res/values/styles.xml文件中,在自定义主题里加入一个item:

<resources xmlns:android="http://schemas.android.com/apk/res/android">  
    <style name="AppBaseTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item>
    </style>
</resources>

然后到AndroidMenifest.xml中修改Application的主题为上述主题,即 android:theme="@style/AppBaseTheme"

4、notifyDataSetChanged 无效的问题

问题描述:调用notifyDataSetChanged 界面并没有刷新
一般情况下,适配器的对应的list数据源如果发生了改变,调用该方法能达到刷新列表的效果,但是有时候发现 当list的数据变化时,采用notifyDataSetChanged()无效。 仔细研究后发现,其实adapter是对list的地址的绑定,而当list重新赋值后,会导致了list指向了新的list的地址。 于是乎,为了解决这个问题,先采用 list.clear(); list.addAll(newlist); 然后采用 adapter.notifyDataSetChanged(),就搞定了。

5、如何获取activity上所有的控件,并获取自己想要的控件进行操作
public List<View> getAllChildViews()
   {
     //decorView是window中的最顶层view,可以从window中获取到decorView
      View view = this.getWindow().getDecorView();
      return getAllChildViews(view);
   }
 
private List<View> getAllChildViews(View view)
   {
      List<View> allchildren = new ArrayList<View>(); 
      if (view instanceof ViewGroup)
      {
        ViewGroup vp = (ViewGroup) view;
        for (int i = 0; i < vp.getChildCount(); i++)
        {
           View viewchild = vp.getChildAt(i);
           allchildren.add(viewchild);
           allchildren.addAll(getAllChildViews(viewchild));
        }
      }
      return allchildren;
   }

public void check(List<View> list)
   {
      for (int i = 0; i < list.size(); i++)
      {
        View v = list.get(i);
        //判断是不是Button
        if (v instanceof Button)
        {
           ((Button) v).setText("改变");
        }
      }
   }

6、去除GridView的默认点击背景颜色
GridView.setSelector(new ColorDrawable(Color.TRANSPARENT));

相关文章

  • 项目开发之经验分享

    项目开发之经验分享 项目开发之经验分享

  • Android开发之项目经验分享

    在Android开发中,除了基本的理论知识,还需要将所学知识运用到真实的项目中,在项目中锻炼自己的分析问题、解决问...

  • 项目开发之经验分享

    一个项目的运转应该是井然有序而非杂论无章,细节决定于很多东西,比如UI中的字体颜色,RGB值可能只是一个R的参数相...

  • Memory Analyzer (MAT)Android内存泄漏

    Memory Analyzer (MAT)Android内存泄漏分析,快速定位 专注于Android开发,分享经验...

  • 最新2016年android框架

    在Android开发中,新技术不断涌现。对于GitHub上如此众多的项目,有人不断Mark,有人分享自己的经验,不...

  • Android百万级应用重构

    本人Android实际开发工作经验3年,新加入一家互联网公司负责项目重构,用户100W+,app已经迭代开发2年之...

  • UI - 收藏集 - 掘金

    Android 多状态加载布局的开发 Tips - Android - 掘金本文将结合自己的项目开发实践,简单分享...

  • greendao 框架数据库升级策略

    专注于Android开发,分享经验总结,欢迎加入 在项目中用到了数据库存储,于是选择了greendao,但是在增删...

  • README

    Android 学习之路 常用网站: 1. Android开发套件 2. 开源项目汇总 经验之谈: 1....

  • Android开发之ListView使用经验分享

    在Android开发中,ListView是使用最广泛的组件之一,虽然谷歌推出了RecycleView,但是很多项目...

网友评论

  • LeoYe168:sqlite存图片,从没用过,虽然理论上应该可行
    YungFan:@默苒 嗯 要根据需求来的
    ebb7f2a77196:@LeoYe 试过可以,如果用户将本地图片删除,就可以通过数据库进行获取了,但是不推荐这样子做。
  • 8be220e78a10:获取所有子view的方法有问题
    YungFan:@笨小孩吗 什么问题?
  • d1a85b7f74a2:6
    YungFan:@不文艺 谢谢 共勉
  • 呃哈哈:没有demo?楼主
    YungFan:@我是不是你大爷 这些都是零散的知识 并不是在一个项目中碰到的问题 不断总结的 所以不适合 既然是经验 肯定是项目中的一块知识点 我总不能把项目拿来分享吧 :smile: 如果项目中也需要用到 直接使用就可以了啊
    呃哈哈:@YungFan 没有看demo 爽:smile::smile::smile:
    YungFan:@我是不是你大爷 把代码粘贴进去就可以用了啊

本文标题:Android开发之项目经验分享

本文链接:https://www.haomeiwen.com/subject/jyugrttx.html