Android开发之项目经验分享

简介: 在Android开发中,除了基本的理论知识,还需要将所学知识运用到真实的项目中,在项目中锻炼自己的分析问题、解决问题的能力,本文将总结一下本人项目中遇到的一些问题,总结成章,与大家共勉~~~1、如何拉伸一个图片为一条线项目需求:需要在布局中设置一条...

在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));
目录
相关文章
|
2天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
4天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
6天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
4天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
5天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
15 2
|
6天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
11天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
39 6
|
12天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
25 5
|
11天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
12天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
29 3