`

有效的减少应用占用的空间——使用系统资源

阅读更多

做安卓开发的,是不是总想把自己的应用做的足够强大,但空间足够小?可以需求方又要求很炫的效果,怎么办?

其实系统自带了很多风格的边框、图标等,而且不同版本之间略有差异,但功能是一样的。我们为什么放着这些现成的资源不用呢?下面就来看看系统都有什么吧。运行下面的例子,可以看到系统中所有drawable资源。

 

MainActivity.java

package com.jmeditor.sysresbrowser;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

	//浏览资源的序号
	private static int index = 0;
	//所有资源列表
	private static List<Map<String,Object>> rs;
	//显示图片的View
	private ImageView imageView;
	//显示图片的背景,因为有些只适合在黑背景下显示
	private LinearLayout imageBg;
	//显示数量
	private TextView textView;
	//显示当前图片的ID,方便引用
	private TextView tips;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView = (TextView)findViewById(R.id.textView);
		tips = (TextView)findViewById(R.id.tips);
		imageView = (ImageView)findViewById(R.id.imageView);
		imageBg = (LinearLayout)findViewById(R.id.imageBg);
		Button imageViewBtnPre = (Button)findViewById(R.id.imageViewBtnPre);
		Button imageViewBtnNext = (Button)findViewById(R.id.imageViewBtnNext);
		
		//读取系统所有的drawable资源
		try {
			Class c = Class.forName("android.R$drawable");
			Field[] fs = c.getDeclaredFields();
			rs = new ArrayList<Map<String,Object>>();
				
			for (Field field : fs) {
				if (field.getType().getName().equals("int") ) {
					Map<String,Object> m = new HashMap<String,Object>();
					m.put("name", field.getName());
					m.put("value", field.get(this));
					rs.add(m);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		//上一张
		imageViewBtnPre.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				if(index > 0){
					index --;
					showImg();
				}
			}

			
		});
		//下一张
		imageViewBtnNext.setOnClickListener(new OnClickListener(){
			
			@Override
			public void onClick(View v) {
				if(index < rs.size() - 1){
					index ++;
					showImg();
				}
			}
			
		});
		
		//背景色
		this.findViewById(R.id.bg_1).setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				imageBg.setBackgroundColor(getResources().getColor(R.color.white));
			}
			
		});
		this.findViewById(R.id.bg_2).setOnClickListener(new OnClickListener(){
			
			@Override
			public void onClick(View v) {
				imageBg.setBackgroundColor(getResources().getColor(R.color.black));
			}
			
		});
		this.findViewById(R.id.bg_3).setOnClickListener(new OnClickListener(){
			
			@Override
			public void onClick(View v) {
				imageBg.setBackgroundColor(getResources().getColor(R.color.blue));
			}
			
		});
	}
	
	private void showImg() {
		imageView.setBackgroundResource(Integer.valueOf(rs.get(index).get("value").toString()));
		String s = getResources().getString(R.string.total_msg);
		textView.setText(s.replaceAll("\\{1\\}", "" + rs.size()).replaceAll("\\{2\\}", "" + (index+1)));
		tips.setText(rs.get(index).get("name").toString());
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

 

布局文件activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    
    <LinearLayout 
        android:id="@+id/imageBg"
        android:layout_width="fill_parent"
        android:layout_height="100dip"
        android:padding="5dip">
	    <ImageView 
	        android:id="@+id/imageView"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip">
		<TextView
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="@string/tips"/>
		<TextView
		    android:id="@+id/tips"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"/>
	</LinearLayout>
	<LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
	    <Button 
	        android:id="@+id/imageViewBtnPre"
	        android:text="@string/pre_img"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"/>
	    
	    <Button 
	        android:id="@+id/imageViewBtnNext"
	        android:text="@string/next_img"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"/>
	</LinearLayout>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/background_title"/>
	    
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
	    <View
	        android:id="@+id/bg_1"
	        android:layout_width="50dip"
	        android:layout_height="50dip"
	        android:layout_margin="5dip"
	        android:background="@color/white"/>
	    
	    <View
	        android:id="@+id/bg_2"
	        android:layout_width="50dip"
	        android:layout_height="50dip"
	        android:layout_margin="5dip"
	        android:background="@color/black"/>
	    
	    <View
	        android:id="@+id/bg_3"
	        android:layout_width="50dip"
	        android:layout_height="50dip"
	        android:layout_margin="5dip"
	        android:background="@color/blue"/>
    </LinearLayout>
</LinearLayout>

 

 

 

  • 大小: 43.7 KB
分享到:
评论

相关推荐

    计算机应用技巧——xp系统

    - **禁用不必要的硬件驱动**:对于不再使用的设备,可以通过设备管理器禁用其驱动程序,避免这些驱动占用系统资源并可能引发的问题。 3. **正确配置BIOS/CMOS设置**:合理设置BIOS/CMOS参数对于确保系统的稳定运行...

    增加C盘空间——WYWZ超强清理

    "增加C盘空间——WYWZ超强清理" 提供了解决这个问题的一个解决方案。下面将详细探讨如何通过深度清理和优化系统盘来提升电脑性能。 首先,我们需要理解为什么C盘会逐渐填满。这主要是由于以下几个原因: 1. **系统...

    iOS游戏应用源代码——pachun-Rocket-Defender.zip

    《iOS游戏应用源代码解析——基于“pachun-Rocket-Defender”》 iOS游戏开发是移动开发领域中的一个重要分支,它结合了强大的硬件性能和Apple的优雅设计哲学,为开发者提供了丰富的创作空间。本篇文章将深入探讨...

    ARM嵌入式技术原理与应用——基于XSCALE及VxWorks操作系统

    - **可裁剪性**:用户可以根据具体的应用需求选择所需的组件和服务,以减小系统的占用空间。 - **高度可靠**:经过严格测试,具有很高的稳定性和可靠性,适合关键任务系统。 - **广泛的硬件支持**:支持多种处理器...

    iOS游戏应用源代码——jerrodputman-CCKit-b689b21.zip

    4. **资源管理**:源代码可能包含资源加载和管理的模块,如图片、音频和纹理的预加载,优化资源的加载速度,减少游戏启动时间和内存占用。 5. **调试工具**:为了便于开发和调试,CCKit可能还包含了日志记录和性能...

    IOS应用源码——TempFileReadWrite.rar

    它们通常在程序结束时被删除,避免占用不必要的磁盘空间。在iOS中,开发者可以使用`NSTemporaryDirectory()`获取临时文件夹路径,以此来创建和管理临时文件。 2. **读写文件**: 在iOS中,读写文件主要通过...

    信息技术——信息资源管理.doc

    此外,信息的数字化存储和管理减少了物理资源的占用,提高了数据的安全性。 对于信息管理方法的研讨,可以对比手工信息管理与计算机信息管理的差异。传统手工信息管理方式,如纸质通信录,虽便于处理少量信息,但在...

    慧系统成就智慧地球—— 系统的全新思考方式

    此外,它们在风险、安全性和合规性管理方面发挥关键作用,同时在扩大规模时还能够减少能源消耗、占用空间和人力资源需求。 智慧系统在现实世界中的应用: 智慧系统的概念已应用于现实世界中的多个领域。比如智慧...

    IOS应用源码——PVRTextureLoader.rar

    在iOS应用开发中,PVR纹理加载器(PVRTextureLoader)是用于处理PVRTC(PowerVR Texture Compression)格式纹理的工具。...同时,这也有助于理解iOS系统如何优化资源使用,为未来的优化工作打下基础。

    CramFS在Linux嵌入式环境的应用——应用CramFS.pdf

    然而,这种方法占用了一定量的内存资源,对于内存有限的嵌入式设备来说,这意味着可用的内存资源减少。例如,如果一个8MB的Flash中存放了经过50%压缩的执行环境,解压缩后需要16MB的RAMDISK空间。这不仅消耗了内存,...

    AndroidWatch应用——记事本开发.7z

    这包括减少内存占用,优化绘制速度,以及合理利用后台服务。 以上就是基于Wear OS开发记事本应用的一些核心知识点,这些技术和实践将帮助开发者创建出既实用又高效的智能手表应用。在实际项目中,开发者还需要不断...

    保护您系统的利器——微软影子系统

    微软影子系统是一种高效、轻量级的系统保护工具,旨在为用户提供安全的计算机环境,防止恶意软件、病毒以及意外更改导致的系统...同时,其小巧的体积和高效的运行方式,使其成为对系统资源要求较高的用户的理想选择。

    系统稳定性——OutOfMemoryError常见原因及解决方法1

    【系统稳定性——OutOfMemoryError常见原因及解决方法】 在Java应用程序中,系统稳定性的一个关键因素是避免出现`OutOfMemoryError`。这种错误通常表明JVM(Java虚拟机)的内存资源已经耗尽,无法继续正常运行。...

    安全卫士——手机加速

    3. **启动优化**:部分应用设置为开机自启动,长期占用系统资源。安全卫士能识别并管理这些自启应用,让用户可以选择性地禁用它们,减少不必要的启动负担。 4. **文件整理**:乱七八糟的文件会占用大量存储空间,...

    NET Compact Framework新动力——加速您的Windows Mobile应用开发(PDF)

    例如,使用延迟绑定可以减少程序启动时的内存占用,优化资源管理可以减少不必要的内存分配,而使用本地方法(Interop服务)可以调用原生代码,提升特定操作的性能。 在数据库集成方面,.NET Compact Framework支持...

    NET Compact Framework新动力——加速您的Windows Mobile应用开发(Video)

    视频可能涵盖了如何通过合理使用资源、减少内存占用、优化代码执行速度等方式来提升应用性能。 4. **数据库支持**:移动应用通常需要处理数据存储,.NET Compact Framework提供了对SQL Server CE的支持,让开发者...

    Report Tool 3.2.4 Unity插件分析资源占用

    Report Tool 3.2.4 能够识别出占用空间大的音频资源,考虑是否可以进行压缩或减小质量。 4. **脚本和逻辑**:过多或过于复杂的脚本可能会增加内存占用和CPU负担。插件可以分析脚本的大小,帮助优化代码结构。 5. *...

    IOS应用源码——UIImage+Sprite for iOS.rar

    通过阅读和研究源代码,我们可以学习如何有效地处理图像资源,以及如何利用iOS系统提供的图形工具来实现复杂的图像操作,比如精灵动画。同时,这也是一个了解和实践Objective-C或Swift编程语言的好机会,因为这些...

Global site tag (gtag.js) - Google Analytics