Android开发之项目经验分享
发布日期:2021-08-22 06:43:12 浏览次数:19 分类:技术文章

本文共 2720 字,大约阅读时间需要 9 分钟。

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

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

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

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

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

2、图片在SQLite中的存取

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

//第一步,将Drawable对象转化为Bitmap对象Bitmap bmp = (((BitmapDrawable)tmp.image).getBitmap());//第二步,声明并创建一个输出字节流对象ByteArrayOutputStream os = new ByteArrayOutputStream();//第三步,调用compress将Bitmap对象压缩为PNG格式,第二个参数为PNG图片质量,第三个参数为接收容器,即输出字节流osbmp.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:

然后到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
getAllChildViews() { //decorView是window中的最顶层view,可以从window中获取到decorView View view = this.getWindow().getDecorView(); return getAllChildViews(view); } private List
getAllChildViews(View view) { List
allchildren = new ArrayList
(); 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
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));

转载地址:https://blog.csdn.net/weixin_33738555/article/details/89592109 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java后台创建url连接,获取接口数据
下一篇:ruby安装

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月12日 10时55分47秒