任何问题请联系WX:uu16853

买模板送网站采集器 让你轻松放开双手运营网站!

购买更多有优惠!

OBB文件和StorageManager类使用介绍 Android开发技术

  从Android 2.3开始新增了一个OBB文件系统和StorageManager类用来管理外部存储上的数据安全。如果你过去开发过Symbian S60第三版或以上的版本可能发现都有一个隔离的文件系统,仅根据自己应用的UID才能读取,当然这样的设计在iOS和WP7均实现了,Android123提示大家这种叫做隔离文件系统,为什么Android 2.3的android.os.storage.StorageManager类就是来解决这个问题的。   如果我们设计一款资源包含比较多的游戏,可能你会发现最终生成的APK文件可能高达300MB,但是APK文件很大导致Android系统无法正常安装,而这么大其实都是游戏中用到的资源文件,我们放到SD卡上可能其他应用也可以访问,比如说系统的图片管理器会索引游戏中的图片资源,而音乐播放器也会索引资源中的音乐,所以Android 2.3的OBB文件(Opaque Binary Blob)可以很好的解决大文件在SD卡上分离出APK文件,同时别的程序没有权限访问这样一种隔离的文件系统。   android.os.storage.StorageManager类的实例化方法需要使用getSystemService(Contxt.STORAGE_SERVICE)才可以,Android开发网再次提醒这是一个API Level至少为9才能调用的类,注意SDK版本以及目标设备的固件。   String  getMountedObbPath(String filename) //通过一个文件名判断挂载的OBB文件路径  boolean  isObbMounted(String filename) //这个OBB文件是否挂载了  boolean  mountObb(String filename, String key, OnObbStateChangeListener listener)  //挂载一个OBB文件  boolean  unmountObb(String filename, boolean force, OnObbStateChangeListener listener)  //反挂载一个obb文件,这个方法是异步的,第二个参数可以强制反挂载。   我们可以看到挂载和反挂载obb文件时都有一个状态回调的类,位于android.os.storage.OnObbStateChangeListener,OnObbStateChangeListener接口实现了一个void  onObbStateChange(String path, int state) 方法来回调状态,第二个参数state的状态有: int ERROR_ALREADY_MOUNTED 这个OBB已经挂载了 int ERROR_COULD_NOT_MOUNT 这个OBB不能挂在到系统. int ERROR_COULD_NOT_UNMOUNT 这个OBB不能反挂载. int ERROR_INTERNAL […]

NativeActivity类在NDK中管理Activity Android开发技术

  在Android 2.3中Google开始逐渐的放宽NDK功能,新增的NativeActivity类允许Android开发者使用C/C++在NDK环境中处理Activity的生命周期。不过Android123提醒从继承关系来看NativeActivity是Activity的子类。要使用该功能,我们必须声明一些内容: <manifest xmlns:android="http://schemas.android.com/apk/res/android"        package="com.example.native_activity"        android:versionCode="1"        android:versionName="1.0">     <uses-sdk android:minSdkVersion="9" />     <application android:label="@string/app_name" android:hasCode="false">              <activity android:name="android.app.NativeActivity"                android:label="@string/app_name"                android:configChanges="orientation|keyboardHidden">              <meta-data android:name="android.app.lib_name"   android:value="native-activity" /> //android.app.lib_name是so文件的名字            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application> </manifest> 有关如何在NDK中实现来自SDK代码,源码如下包含了使用本地语言处理感应器Sensor: #include <jni.h>#include <errno.h> #include <EGL/egl.h>#include <GLES/gl.h> #include <android/sensor.h>#include <android/log.h>#include <android_native_app_glue.h> #define LOGI(…) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))#define LOGW(…) ((void)__android_log_print(ANDROID_LOG_WARN, […]

手势识别兼容Android 1.x和2.x的代码 Android开发技术

   由于Android 2.x开始很多API变动比较大新增了一些比如多点触控的支持,对于屏幕触控手势识别中我们需要考虑更多的实现方法,下面是一段兼容Android 1.x和2.x的代码,可以让我们的程序兼容几乎99%的Android手机。   一、首先新建一个抽象类判断SDK版本问题  public abstract class VersionedGestureDetector {    private static final String TAG = "VersionedGestureDetector";     OnGestureListener mListener;     public static VersionedGestureDetector newInstance(Context context,            OnGestureListener listener) {  //设计实例化构造方法,这里Android123提示大家目前有3种API的实现方法,我们需要逐一考虑最优的解决方法,以满足高平台更多的功能实现。         final int sdkVersion = Integer.parseInt(Build.VERSION.SDK); //使用android.os.Build判断API Level,但需要将字符串转换为整形        VersionedGestureDetector detector = null;        if (sdkVersion < Build.VERSION_CODES.ECLAIR) { //如果版本小于2.0则使用1.5版本的API,可以兼容1.5和1.6            detector = new CupcakeDetector();        } else […]

StrictMode限制模式API加速你的应用 Android开发技术

   从Android 2.3开始提供了一个新的类名为StrictMode可以帮助开发者改进你的Android应用,StrictMode通常可以捕捉到发生在磁盘或网络访问的应用主线程中,可以让主线程处理UI和动画在磁盘读写和网络操作时变得更平滑,避免ANR窗口的发生。   一段示例代码可以很好的说明Android 2.3新特性StrictMode限制模式的工作方式,我们在Activity的onCreate中加入    public void onCreate() {     if (DEVELOPER_MODE) { //Android开发网提醒大家,这个标记自己设置一个全局的宏,当然Java中我们用一个Boolean类型设置debug模式好了         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()                 .detectDiskReads()                  .detectDiskWrites()                 .detectNetwork()   // 这里可以替换为detectAll() 就包括了磁盘读写和网络I/O                 .penaltyLog()  //打印logcat                 .build());         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()                  .detectLeakedSqlLiteObjects() //探测SQLite数据库操作                 .penaltyLog() //打印logcat                 .penaltyDeath()                 .build());     }     super.onCreate(); }   有关Android 2.3的限制模式使用和具体的测试,Android123将在明天详细说明,有兴趣的网友可以查看下SDK文档的android.os.StrictMode,具体的效果和开发改进意见需要进行实际评估。

Android加速感应器开发平衡球代码解析 Android开发技术

   如何使用Android的加速感应器开发一个控制铁球滚动的游戏: public class AccelerometerPlayActivity extends Activity {     private SimulationView mSimulationView; //游戏主显示View    private SensorManager mSensorManager; //感应器管理类    private PowerManager mPowerManager; //电源控制,比如防锁屏    private WindowManager mWindowManager;     private Display mDisplay;     private WakeLock mWakeLock;      @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);          mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); // 实例化感应器管理类         mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);         mWindowManager = (WindowManager) […]

扫描和获取OBB文件信息 Android开发技术

  今天一起来研究下如何扫描和获取Opaque Binary Blob (OBB)文件信息,有关OBB文件可以在 OBB文件和StorageManager类使用介绍 一文中找到,作为Android 2.3的新特性OBB文件放在SD卡上我们需要通过一种方式识别处理这种文件类型,在android.content.res.ObbScanner类中提供了一个静态的方法来获取一个OBB文件的信息,直接执行ObbScanner.getOBBInfo方法返回一个ObbInfo对象,该方法原型声明为static ObbInfo  getObbInfo(String filePath) ,而有关的ObbInfo类是android.os.Parcelable的子类,构造方法比较特殊,如果我们过去写过Android的AIDL服务对这个Parcelable应该不陌生。   ObbInfo类的字段定义如下    public String filename obb文件名     public int flags OBB文件的相关标识,目前只有OBB_OVERLAY则表示补丁覆盖过定义为1     public String packageName 这个obb文件属于哪个packageName的     public int version obb文件版本     ObbInfo的构造方法参考Android123以前提到的Parcelable类相关内容即可     public static final Creator<ObbInfo> CREATOR         提供了三个基础方法 int  describeContents() String  toString() void  writeToParcel(Parcel dest, int parcelableFlags)

Android 2.4改进主要针对平板电脑 Android开发技术

  按照目前曝光的消息来看Android 2.4蜂巢可能主要改进用于平板电脑,最终可能在2011年2月份左右发布,届时很多实用NVIDIA Tegra2的平板将会大量采用。   1. NVIDIA Tegra2目前主要使用的厂商有Motorola,目前网上已经曝光了这款MotoPad的原型机图片,最终的设计应该会有变动,不过Tegar2作为一款实用A9架构的双核处理器可能比目前主流的Snapdragon QSD8250这种1GHz的A8架构处理器更有竞争力在多媒体方面。   2. 目前平板电脑中iPad凭借出色的硬件制造工艺已经赢得了不少市场,而手机制造商Motorola、HTC在这种设备制造上可能不如传统的PC制造商如Acer、Asus他们经验丰富。Android 2.4最终将对WSVGA等高分辨率的兼容可以让开发者不考虑过多的UI设计。   3. Android 2.3的升级和改进可以看得出增加了硬件的支持,前置摄像头视频通话、NFC以及更多的感应器可以看出Google目前已经领先其他移动操作系统。  如果你现在考虑购买平板,可能512MB的RAM和Tegra2的CPU是一个明智的选择,不过遗憾的是目前知名品牌中还没有推出相应的解决方案,一切要看2011年了。

电子邮件解析android.net.MailTo类 Android开发技术

   如果遇到一个Email的Url如何解析出相关内容呢? android.net.MailTo类可以很好的处理类似 mailto:android123@163.com 这样的电子邮件Url。 String  getBody() //从一个Url获取邮件的正文内容 String  getCc()  //获取抄送地址 Map<String, String>  getHeaders()  //获取邮件头,比如编码类型,发送时间、IP等等 String  getSubject()  //获取主题 String  getTo()  //获取收信人 static boolean  isMailTo(String url)  //判断一个Url是否包含Email的链接 static MailTo  parse(String url)  //将一个Url解析成MailTo类   

Android流量统计TrafficStats类的使用 Android开发技术

  对于Android流量统计来说在2.2版中加入了TrafficStats类可以轻松获取,其实本身TrafficStats类也是读取Linux提供的文件对象系统类型的文本进行解析。android.net.TrafficStats类中,提供了多种静态方法,可以直接调用获取,返回类型均为long型,如果返回等于-1代表 UNSUPPORTED 当前设备不支持统计。    static long  getMobileRxBytes()  //获取通过Mobile连接收到的字节总数,这里Android123提示大家不包含WiFi   static long  getMobileRxPackets()  //获取Mobile连接收到的数据包总数   static long  getMobileTxBytes()  //Mobile发送的总字节数   static long  getMobileTxPackets()  //Mobile发送的总数据包数   static long  getTotalRxBytes()  //获取总的接受字节数,包含Mobile和WiFi等   static long  getTotalRxPackets()  //总的接受数据包数,包含Mobile和WiFi等   static long  getTotalTxBytes()  //总的发送字节数,包含Mobile和WiFi等   static long  getTotalTxPackets()  //发送的总数据包数,包含Mobile和WiFi等  static long  getUidRxBytes(int uid)  //获取某个网络UID的接受字节数 static long  getUidTxBytes(int uid) //获取某个网络UID的发送字节数   最后Android开发网再次提醒开发者,TrafficStats类工作在Android 2.2 API Level为8的固件上。

Android获取摄像头详细信息 Android开发技术

  如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头的详细信息,在Android 2.3 SDK中得到了增强:   在android.hardware.Camera类中,API Level 9的SDK中加入了两个比较重要的方法,使用getNumberOfCameras这个static类型方法可以获取当前Android设备上的摄像头数量,比如Nexus S有两个,方法原型如下   public static int getNumberOfCameras ()      而对于具体的每个摄像头的信息,可以通过Camera类的getCameraInfo()这个静态方法获取,该方法有两个参数,参数一的ID,我们通过getNumberOfCameras获取的值减1即可,类似数组索引从0开始一样,用循环遍历每个摄像头信息,参数二是android.hardware.Camera.CameraInfo类,有关getCameraInfo方法的原型如下:   public static void getCameraInfo (int cameraId, Camera.CameraInfo cameraInfo)   对于Camera.CameraInfo类而言,比较简单,包含两个字段   public int facing   代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置  public int orientation  下面是拍照的旋转方向,一般自然些有0度、90度、180度和270度,这样可以获取我们正确的手握设备是横着还是竖着,有关拍照时的方向设置,可以参考下面的代码设置   public static void setCameraDisplayOrientation(Activity activity,         int cameraId, android.hardware.Camera camera) {  […]

Android 2.2新增的DeviceAdminInfo类 Android开发技术

   在Android 2.2中新增了一个android.app.admin.DeviceAdminInfo类,可以帮助我们以管理员权限获取一个Package信息,DeviceAdminInfo类有一个构造方法为DeviceAdminInfo(Context context, ResolveInfo receiver) 来实例化该类,参数一为目标PackageManager的Context。   ActivityInfo  getActivityInfo()  获取该Context的Activity信息,返回一个ActivityInfo对象  ComponentName  getComponent()  //获取这个Package的Component名称  String  getPackageName()  //获取这个apk包的package名称  String  getReceiverName()  //返回所有的receiver名称  String  getTagForPolicy(int policyIdent)  //返回一些定义的tag根据定义,这里定义的有 USES_POLICY_FORCE_LOCK 、 USES_POLICY_LIMIT_PASSWORD 、USES_POLICY_RESET_PASSWORD 、  USES_POLICY_WATCH_LOGIN和USES_POLICY_WIPE_DATA  CharSequence  loadDescription(PackageManager pm)  //载入一个package的描述 Drawable  loadIcon(PackageManager pm)  //这里android123提示对于apk文件在2.2中推荐的获取icon方法 CharSequence  loadLabel(PackageManager pm) //获取软件名称 boolean  usesPolicy(int policyIdent)  //参数定义参考上面的getTagForPolicy

UiModeManager设置夜间模式和行车模式 Android开发技术

  Android在2.2时新增了一个实用的类UiModeManager可以方便的管理当前Android设备的夜间模式和行车模式,位于android.app.UiModeManager这个包中。UiModeManager类使用Context.getSystemService(Context.UI_MODE_SERVICE) 来实例化,主要提供了以下几种方法 void  disableCarMode(int flags) // 禁止行车模式,这里参数一般为UiModeManager.DISABLE_CAR_MODE_GO_HOMEvoid  enableCarMode(int flags) // 启用行车模式,这里参数一般为UiModeManager.ENABLE_CAR_MODE_GO_CAR_HOME 这里Android123提示大家,在Android 2.2开始引入了另一种主题为Car Home,进入后手机的图标会更大,适合开车的人使用手机播放音乐,控制导航什么的。 int  getCurrentModeType()  //返回当前的模式,返回值有三种情况,夜间模式自动 MODE_NIGHT_AUTO ,夜间模式关闭 MODE_NIGHT_NO 和夜间模式开启 MODE_NIGHT_YES  夜间模式主要是设置Car Home主题的背景颜色,可以帮助我们在夜间或白天看清楚,就像很多GPS导航软件夜间模式和后地图背景为纯黑,看起来不是那么刺眼。  int  getNightMode()  //获取夜间模式状态 void  setNightMode(int mode)  //设置夜间模式。   同时UiModeManager类还提供了四个action定义,比如进入行车模式 ACTION_ENTER_CAR_MODE,进入桌面模式ACTION_ENTER_DESK_MODE,退出行车模式 ACTION_EXIT_CAR_MODE 和退出桌面模式ACTION_EXIT_DESK_MODE。 

Android开发图书推荐 Android开发技术

  很多入门Android开发者网友还是喜欢看书学习,对于SDK文档和ApiDemo等还无法快速了解,Android123在元旦给大家推荐两本入门级别的图书,作为图灵教育的书籍在质量等方面还有有保证的。   第一本为 《Android开发入门教程》 是原书 Beginning Android 2 的翻译版本 ,定价59.00元一般在44元左右可以买到。   第二本为 《精通Android 2》是原书 Pro Android 2  的翻译版本,定价89.00元,一般66元左右可以买到。   这两本书整体内容比较简单,对于Android开发的常见问题都已经提到,经Android123试读国外原版描述问题等方面都很到位准确,相对于国内的书籍来说更适合入门级Android开发者快速掌握,没有任何啰嗦或语义不清晰等问题。一般Android开发网很少推荐图书,毕竟中高级的技术开发者很少有空出书,所以大家学习掌握技术时还是要靠自己多研究源码。  

Android开发Java图书推荐 Android开发技术

   很多网友表示看Android时,很多概念不是很清楚,可能是因为Java基础不是很了解,很多开发者可能推荐Java编程思想,不过短期内这种类型的图书更像是语法糖这类的玩具,这里Android123推荐三本图书,可以免去大家找来找去,Android开发网的宗旨就是简单高效,经济,毕竟市面上的图书鱼龙混杂,其实买两本厚书,从浅入深学习Java这种语言还是很快的。    1. 疯狂Java讲义 原价 ¥99.00 元    2. Java高手真经. 编程基础卷:Java核心编程技术 定价 :¥96.00    3. 分布式Java应用:基础与实践  原价¥49.80 元     这三本书看起来可能前两本比较厚,但是内容难易中等,入门和提高很轻松,如果你继续提高,再看Java编程思想可能发现,开发Android应用基本上这4本书来学习Java基础足够了。投入不超过300元,比起各种Java培训等等更有效经济。

查看Android应用的详细信息2.3有新方法 Android开发技术

  在老版本的固件中,我们查看一个Android应用的相信信息,需要自己构造Settings的component name这些package name和uri,在Android 2.3中调用,被精简成了一个Intent的Action,定义如下Intent.ACTION_APPLICATION_DETAILS_SETTINGS 当然直接硬编码为 "android.settings.APPLICATION_DETAILS_SETTINGS" 这个字符串,在API Level为9的SDK以及最终运行在2.3或更高版本的固件中,比如Nexus S、Atrix 4G、Xperia arc等新机型上。

Android OpenGL下截图代码 Android开发技术

   Android平台如何在OpenGL下截图呢? 如果是一个FPS类的游戏可能常规的方式截图,由于Android系统底层读取framebuffer的效率不是很高,尝尝截图出来的游戏可能由于刷新问题,产生上半部分和下半部分不匹配的问题,在GL中我们可以使用下面这个代码来解决。      public static Bitmap SavePixels(int x, int y, int w, int h, GL10 gl)    {           int b[]=new int[w*h];         int bt[]=new int[w*h];         IntBuffer ib=IntBuffer.wrap(b);         ib.position(0);         gl.glReadPixels(x, y, w, h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib);         for(int i=0; i<h; i++)         {               for(int j=0; j<w; j++)              {                   int pix=b[i*w+j];                   int pb=(pix>>16)&0xff;                   int pr=(pix<<16)&0x00ff0000;                   int pix1=(pix&0xff00ff00) | pr […]

自定义Android菜单背景 Android开发技术

  如何自定义Android菜单背景呢? 默认的情况下Android系统的菜单是白色的,下面的例子可以通过自定义的xml布局实现个性化的menu public class MenuEx extends Activity {  private static final String TAG = "android123";      @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);            }             @Override public boolean onCreateOptionsMenu(Menu menu) {        super.onCreateOptionsMenu(menu);  MenuInflater inflater = new MenuInflater(getApplicationContext());  inflater.inflate(R.menu.options_menu, menu);  setMenuBackground();  return true; }   关键代码就是重写Layout类的工厂方法onCreateView,这里对比绘制的View来替换系统中的 protected void setMenuBackground(){          Log.d(TAG, "开始设置菜单的的背景");     getLayoutInflater().setFactory( new Factory() {            @Override      public View onCreateView ( String […]

ListView自动滚动方法 Android开发技术

  如何让你的ListView实现自动滚动呢? Android其实已经考虑到ListView控件的智能滚动操作。直接在Layout中写即可,注意下面的stackFromBottom以及transcriptMode这两个属性。Android123提示大家类似Market客户端的低端不断滚动,Android123将在以后的文章中告诉大家更好的解决方法。涉及代码如下:     <ListView android:id="listCWJ"              android:layout_width="fill_parent"              android:layout_height="fill_parent"              android:stackFromBottom="true"                android:transcriptMode="alwaysScroll"              /> 

Android获取本机电话号码 Android开发技术

    如何在Android上获取本机电话号码,目前Android上提供了一个API可以读取早期SIM卡上固化的号码, private String getPhoneNumber(){       TelephonyManager mTelephonyMgr;       mTelephonyMgr = (TelephonyManager)  getSystemService(Context.TELEPHONY_SERVICE);        return mTelephonyMgr.getLine1Number();   }     上面的getPhoneNumber方法返回当前手机的电话号码,同时必须在androidmanifest.xml中加入 android.permission.READ_PHONE_STATE 这个权限,但是Android123提示大家上面的方法只能获取很老SIM卡的手机号码,目前主流的获取用户手机号码一般采用用户主动发送短信到SP或接收手机来获取。

Android JSON解析类 – JsonReader Android开发技术

   在Android 3.0 honeycomb开始提供了新的JSON解析类 – android.util.JsonReader,下面Android123以下面的JSON为例子 [    {      "id": 912345678901,      "text": "How do I read JSON on Android?",      "geo": null,      "user": {        "name": "android_newb",        "followers_count": 41           },    {      "id": 912345678902,      "text": "@android_newb just use android.util.JsonReader!",      "geo": [50.454722, -104.606667],      "user": {        […]

Android JSON写入类 – JsonWriter Android开发技术

   在Android 3.0中新增了一个JSON写入类android.util.JsonWriter,使用JsonWriter可以轻松的生成JSON格式的数据,比如下面的JSON数据为    [    {      "id": 912345678901,      "text": "How do I write JSON on Android?",      "geo": null,      "user": {        "name": "android_newb",        "followers_count": 41           },    {      "id": 912345678902,      "text": "@android_newb just use android.util.JsonWriter!",      "geo": [50.454722, -104.606667],      "user": {        "name": "jesse", […]

Android 3.0新增日历控件CalendarView Android开发技术

  在Android 3.0中新增的日历视图控件可以显示网格状的日历内容,android.widget.CalendarView是从android.widget.FrameLayout中继承。 CalendarView 类提供了基本的日历设置方法,    long  getDate()  获取从1970年,1月1日,0点0分0秒到现在的毫秒数,因为返回是long型最终只能截止到2038年 int  getFirstDayOfWeek()  //获取当天是本周的第几天,Android123提示返回的定义在java.util.Calendar类中,比如Calendar.Monday为星期一,定义值为2。 long  getMaxDate()  //获取CalendarView支持1970年到那天的最大天数 long  getMinDate() //获取CalendarView支持1970年到那天的最小天数 boolean  getShowWeekNumber()  //获取是否显示星期号 boolean  isEnabled()  //是否显示本日历视图  public void setDate (long date, boolean animate, boolean center) //设置选择日期到1970年的描述 void  setDate(long date) //设置选择的日期描述到1970年 void  setEnabled(boolean enabled) //设置是否启用视图 void  setFirstDayOfWeek(int firstDayOfWeek)  //设置本周起始天数 void  setMaxDate(long maxDate)  void  setMinDate(long minDate)  void  setOnDateChangeListener(CalendarView.OnDateChangeListener listener)   //日历视图修改的接口,这个介绍看下面。 void  setShowWeekNumber(boolean showWeekNumber) //设置是否显示周号   有关日历控件CalendarView的设置接口 android.widget.CalendarView.OnDateChangeListener 只实现了一个回调方法void  onSelectedDayChange(CalendarView view, int […]

Fragment对比Activity – Android碎片介绍 Android开发技术

  Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面Android123介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块 ,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity.   一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。    Fragment作为Android 3.0的新特性,有些功能还是比较强大的,比如 合并两个Activity,如图   我们可以看到两个Activity通过两个Fragment合并到一个Activity的布局方式,对于平板等大屏幕设备来说有着不错的展示面板。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下:      创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码 public static class Android123Fragment extends Fragment {     @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,                              Bundle savedInstanceState) {                return inflater.inflate(R.layout.android123_fragment, container, false);     } } Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,Android开发网给大家整理下Fragment的生命周期如上图所示,部分类似Activity的,我们详细解释 onCreate()   当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的 onCreateView()    当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI.  那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写 <?xml version="1.0" […]

Android Fragment使用详解 Android开发技术

  有关Android Fragment相关内容,昨天我们在Fragment对比Activity – Android碎片介绍一文简单讲了下Fragment的作用以及它的生命周期,今天Android123主要讲些Fragment的管理控制、性能优化以及和Activity的传输相关内容。   一、 管理Fragment    管理Fragment在你的Activity你需要使用一个名为FragmentManager的类,通过调用getFragmentManager()方法来实例化该管理类在你的Activity种。 FragmentManager 类一些主要的方法有通过findFragmentById()来获取一个Activity中有关Fragment布局。当然还有类似findFragmentByTag()方法,以及唐Fragment中出栈的popBackStack()同时可以注册addOnBackStackChangedListener()管理.具体的可以在android.app.FragmentManager类中了解  二、 优化Fragment事物处理   一个很好的特性在添加,删除,替换fragment在Activity时可以使用FragmentTransaction类来提高批量处理的效率,这点和SQLite的数据库更新原理类似。  FragmentManager fragmentManager = getFragmentManager();  //实例化fragmentmanager类 FragmentTransaction transaction = fragmentManager.beginTransaction(); //通过begintransaction方法获取一个事物处理实例。   在这期间可以使用 add(), remove(), 以及  replace(). 最终需要改变时执行 commit()即可,接下来我们写代码   transaction.replace(R.id.fragment_container, newFragment);   transaction.addToBackStack(null);   transaction.commit();   三、Fragment和Activity互相通讯   通常Fragment中我们放入平时标准的控件或自定义的控件,基本上和Activity一样,但是如何Fragment中的View布局也是放到Activity中的,这里Android开发网提示大家有两种方法来实现   View listView = getActivity().findViewById(R.id.cwj); //通过getActivity方法可以获取一个Activity中的fragment,这里的cwj是一个fragment,在activity中的布局如下:   <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="horizontal"     android:layout_width="match_parent"     […]

DialogFragment类介绍 Android开发技术

   DialogFragment是Android 3.0新增的Fragment子类,他的Package在android.app.DialogFragment 中,Dialog和Android常规的Dialog是不同的实现方法。   一、常规对话框 public static class MyDialogFragment extends DialogFragment {    int mNum;     static MyDialogFragment newInstance(int num) {        MyDialogFragment f = new MyDialogFragment();         Bundle args = new Bundle();        args.putInt("num", num);        f.setArguments(args);         return f;    }    下面是Fragment的onCreate方法,需要注意的是,设置布局不在这里,和Activity有些不同。     @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mNum = getArguments().getInt("num");         int style = […]

Action Bar使用方法 – Android活动栏(一) Android开发技术

  在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个重要的内容,Action Bar主要是用于代替传统的标题栏,对于Android平板设备来说屏幕更大它的标题使用Action Bar来设计可以展示更多丰富的内容,方便操控。   Action Bar主要功能包含:   1. 显示选项菜单  2. 提供标签页的切换方式的导航功能,可以切换多个fragment.   3.  提供下拉的导航条目.  4. 提供交互式活动视图代替选项条目   5. 使用程序的图标作为返回Home主屏或向上的导航操作。   首先我们一起来看下Action Bar代替传统Title的效果,下面一个平板应用的标题栏,是不是图标很大啊。     Android开发网提示在你的程序中应用ActionBar需要注意几点,SDK和最终运行的固件必须是Android 3.0即honeycomb,在androidmanifest.xml文件中的uses-sdk元素中加入android:minSdkVersion或android:targetSdkVersion,类似 <manifest xmlns:android="http://schemas.android.com/apk/res/android"       package="com.android123.cwj"       android:versionCode="1"       android:versionName="1.0">     <uses-sdk android:minSdkVersion="honeycomb" />     <application … >         …     </application> </manifest>   如果需要隐藏Action Bar可以在你的Activity的属性中设置主题风格为NoTitleBar在你的manifest文件中,Android123提示大家,下面的代码在3.0以前是隐藏标题,而在3.0以后就是隐藏ActionBar了,代码为   <activity android:theme="@android:style/Theme.NoTitleBar">    一、添加活动条目 […]

ActionBar使用方法 – Android活动栏(二) Android开发技术

   有关Android活动栏-ActionBar的功能除了添加活动条目 Action Items和添加活动视图 Action View外今天Android123和大家一起来看下支持多Fragment切换的ActionBar标签页和下拉导航。   三、添加标签 Tabs    在ActionBar中实现标签页可以实现android.app.ActionBar.TabListener ,重写onTabSelected、onTabUnselected和onTabReselected方法来关联Fragment。代码如下   private class MyTabListener implements ActionBar.TabListener {     private TabContentFragment mFragment;      // Called to create an instance of the listener when adding a new tab     public TabListener(TabContentFragment fragment) {         mFragment = fragment;     }      @Override     public void onTabSelected(Tab […]

Action Bar示例代码 (一) Android开发技术

   今天一起来看下Android Action Bar的示例代码,我们通过活动栏做一个简单选项菜单。下面这个例子将演示ActionBar.NAVIGATION_MODE_STANDARD、ActionBar.NAVIGATION_MODE_TABS和                     : ActionBar.NAVIGATION_MODE_STANDARD等模式的效果。最后Android123仍然提示大家Action Bar是Android 3.0 honeycomb才开始有的特性,老版本的SDK和固件无法使用。 public class ActionBarDisplayOptions extends Activity  implements View.OnClickListener, ActionBar.TabListener {    private View mCustomView;     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.action_bar_display_options);         findViewById(R.id.toggle_home_as_up).setOnClickListener(this);        findViewById(R.id.toggle_show_home).setOnClickListener(this);        findViewById(R.id.toggle_use_logo).setOnClickListener(this);        findViewById(R.id.toggle_show_title).setOnClickListener(this);        findViewById(R.id.toggle_show_custom).setOnClickListener(this);        findViewById(R.id.toggle_navigation).setOnClickListener(this);        findViewById(R.id.cycle_custom_gravity).setOnClickListener(this);         mCustomView = getLayoutInflater().inflate(R.layout.action_bar_display_options_custom, null);         final ActionBar bar = getActionBar();        bar.setCustomView(mCustomView,                new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));         bar.addTab(bar.newTab().setText("Tab 1").setTabListener(this));        […]

ActionBar示例代码 (二) Android开发技术

   ActionBar相关的示例代码第二部分分为两种,作为Android 3.0的重要特性我们直接看代码:   一、使用菜单资源构造   public class ActionBarMechanics extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);         getWindow().requestFeature(Window.FEATURE_ACTION_BAR);    }     @Override    public boolean onCreateOptionsMenu(Menu menu) {              menu.add("Normal item");         MenuItem actionItem = menu.add("Action Button");        actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);        actionItem.setIcon(android.R.drawable.ic_menu_share);         return true;    }     @Override    public boolean onOptionsItemSelected(MenuItem item) {        Toast.makeText(this, "Selected Item: " […]

DialogFragment示例代码 Android开发技术

   Fragment作为Android 3.0的重要新特性Android123已经使用了三篇文章进行介绍,如果你还不知道Fragment可以先通过Fragment对比Activity – Android碎片介绍一文了解,今天有关Fragment的子类DialogFragment完整的示例工程代码我们一起来看看:   警告窗口 FragmentAlertDialog    public class FragmentAlertDialog extends Activity {     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.fragment_dialog);         View tv = findViewById(R.id.text);        ((TextView)tv).setText("Android123-DialogFragment Samples");         Button button = (Button)findViewById(R.id.show);        button.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                showDialog();            }        });    }     void showDialog() {        DialogFragment newFragment = […]

Fragment示例代码 Android开发技术

  Android 3.0平板系统的重要特性Fragment示例代码今天Android123给大家两个例子,一起来看下Fragment的实战代码:   一、通过Fragment实现简单的上下文菜单   public class FragmentContextMenu extends Activity {     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);          ContextMenuFragment content = new ContextMenuFragment();          getFragmentManager().beginTransaction().add(android.R.id.content, content).commit(); //在Activity中通过这个与Fragment通讯    }    下面ContextMenuFragment是我们从Fragment派生的子类,里面重写了onCreateView来布局自己的Fragment     public static class ContextMenuFragment extends Fragment {         @Override        public View onCreateView(LayoutInflater inflater, ViewGroup container,                Bundle savedInstanceState) {            View root = […]

ProcessDialog结合Thread处理耗时操作 Android开发技术

   很多初入Android开发的网友表示经常遇到ANR这类的UI假死或提示强制关闭的问题,有的网友可能想到通过创建一个Android Service的方式来解决耗时操作的假死,但是Android123还是给大家一个简单实用的方法通过创建一个线程而不是服务的方式来解决耗时操作时的假死或等待。   在一个名为Android123的Activity中,我们通过一个进度条控件ProgressDialog可以处理很多耗时操作。代码如下 final ProgressDialog dialog = ProgressDialog.show(Android123.this, "标题", "正文", true);   final Handler handler = new Handler() {      public void handleMessage(Message msg) {         dialog.dismiss();   //关闭progressdialog      }      };   Thread cwjThread = new Thread() {        public void run() {        //这里处理耗时操作,比如文件下载等等。       handler.sendEmptyMessage(0);    //告诉handler      }      };   cwjThread.start(); 

API Level对照表,更新至2.3.3 Android开发技术

   Google近期更新Android SDK频率加快,很多网友还不知道API Level 10是多少,还有就是Android 3.0 honeycomb的API Level又是多少呢? 下面Android123整理出最新的SDK API版本号对照表:     Android 3.0 – honeycomb     Android 2.3.3 – API Level 10     Android 2.3 – API Level 9     2.2 – 8     2.1 – 7     2..0.1 – 6     2.0 – 5     1.6 – 4     1.5 -3     1.1 – […]

100% Secure Checkout

PayPal / MasterCard / Visa