工具:WinRAR、DoAPk.exe、Java环境
步骤/方法:
1、把要更改图标的APK程序后缀名改为zip,提示不用管,点击“是”,这样做的目的是让程序能和winRAR建立起关联,这样才能用rar将APK程序进行解压
2、将这个改了后缀的zip包用winrar解压出来,看到如下文件和目录,其中看到一个名为res的目录,这个目录中存放的就是安装程序的资源文件,包括各种图片素材和声音素材,当然,我们需要的程序图标就包含在里面,双击打开res这个目录
3、在系统上方的搜索栏搜索带有"icon"字样的文件。得到结果如图,通过基本判断可以得知,app_icon.png就是程序的图标
4、找一个自己喜欢的程序图标,需要注意的是,替换后的程序图标的名字,格式,分辨率大小都要和原图标一致,然后才把原来的app_icon.png替换,下图这是替换后的图标效果
5、替换完成之后,重新打包程序。回到程序解压之后的目录,选中所有文件。右击选择“添加到压缩文件”,压缩文件格式选择“zip”,压缩方式用“最好”,如果选择“最快”,虽然能为程序解压提供更快的速度,但是会使程序占用的空间也更大。最好则是表示拥有最优化的体积,能节省手机内存空间
6、等待RAR将所有文件和目录压成zip包之后,将得到的压缩包后缀由zip改为apk,d出警告提示选择“确定”
7、打开Doapk.exe,点击“单独制作ROM和APK签名”这一按钮,之后会d出一个窗口,这里让用户选择自己需要签名的APK文件
8、d出窗口中选择好自己改好图标的APK文件,然后点击制作签名,这样就完成了对APK程序的签名,这样的APK程序在手机上安装才不会d出错误提示
下面是Demo的详细步骤:一、新建一个Android工程命名为:WidgetDemo.
二、准备素材,一个是Widget的图标,一个是Widget的背景。存放目录如下图:
三、修改string.xml文件如下:
[html] view plain copy print?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, WidetDemo!</string>
<string name="app_name">DaysToWorldCup</string>
</resources>
四、建立Widget内容提供者文件,我们在res下建立xml文件夹,并且新建一个widget_provider.xml代码入下:
[html] view plain copy print?
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="50dip"
android:minHeight="50dip"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/main"/>
其中宽度、长度很清楚,还有android:updatePeriodMillis是自动更新的时间间隔,android:initialLayout是Widget的界面描述文件。
还有一个属性Android:configure是可选的,如果你的Widget需要在启动时先启动一个Activity,则需要设定该项为你的Activity。
五、修改main.xml布局,代码如下:
[html] view plain copy print?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/wordcup"
>
<TextView
android:id="@+id/wordcup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:textSize="12px"
android:textColor="#ff0000"
/>
</LinearLayout>
六、修改WidgetDemo.java代码如下:
[java] view plain copy print?
package com.android.tutor
import java.util.Calendar
import java.util.Date
import java.util.GregorianCalendar
import java.util.Timer
import java.util.TimerTask
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.ComponentName
import android.content.Context
import android.widget.RemoteViews
public class WidetDemo extends AppWidgetProvider {
/** Called when the activity is first created. */
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Timer timer = new Timer()
timer.scheduleAtFixedRate(new MyTime(context,appWidgetManager), 1, 60000)
super.onUpdate(context, appWidgetManager, appWidgetIds)
}
private class MyTime extends TimerTask{
RemoteViews remoteViews
AppWidgetManager appWidgetManager
ComponentName thisWidget
public MyTime(Context context,AppWidgetManager appWidgetManager){
this.appWidgetManager = appWidgetManager
remoteViews = new RemoteViews(context.getPackageName(),R.layout.main)
thisWidget = new ComponentName(context,WidetDemo.class)
}
public void run() {
Date date = new Date()
Calendar calendar = new GregorianCalendar(2010,06,11)
long days = (((calendar.getTimeInMillis()-date.getTime())/1000))/86400
remoteViews.setTextViewText(R.id.wordcup, "距离南非世界杯还有" + days+"天")
appWidgetManager.updateAppWidget(thisWidget, remoteViews)
}
}
}
七、修改配置文件AndroidManifest.xml,代码如下:
[html] view plain copy print?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.tutor"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".WidetDemo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_provider"/>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>
其中
[html] view plain copy print?
<receiver android:name=".WidetDemo"android:label="@string/app_name">
name指定该Widget的接收者是WidetDemo,即你建立的AppWidgetProvider子类,label指定该Widget的标签,还可以用属性icon指定图标
[html] view plain copy print?
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
是采用android文档中提供的,用于接收更新的intent意图
[html] view plain copy print?
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_provider"/>
resource指定该Widget的描述信息,该描述中定义了Widget的相关信息,如该Widget的宽度、长度、自动更新的间隔时间等信息,也就是前面四所定义的内容
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)