前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发之项目经验分享

Android开发之项目经验分享

作者头像
YungFan
发布2018-05-03 14:38:37
6650
发布2018-05-03 14:38:37
举报
文章被收录于专栏:学海无涯学海无涯

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

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

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

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

代码语言:javascript
复制
<?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文件中可以这样引用:

代码语言:javascript
复制
<LinearLayout 
            android:layout_width="fill_parent" 
            android:layout_height="1px" 
            android:background="@drawable/repeat" > 
</LinearLayout> 
2、图片在SQLite中的存取

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

代码语言:javascript
复制
//第一步,将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)从数据库读取图片

代码语言:javascript
复制
//第一步,从数据库中读取出相应数据,并保存在字节数组中
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:

代码语言:javascript
复制
<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上所有的控件,并获取自己想要的控件进行操作
代码语言:javascript
复制
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的默认点击背景颜色
代码语言:javascript
复制
GridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.05.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、如何拉伸一个图片为一条线
  • 2、图片在SQLite中的存取
  • 过程总结
  • 总结思路为
  • 3、修改 EditText.setError("Info"); 的字体颜色
  • 4、notifyDataSetChanged 无效的问题
  • 5、如何获取activity上所有的控件,并获取自己想要的控件进行操作
  • 6、去除GridView的默认点击背景颜色
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档