ZircoN

          API Demos_App/Activity

          此篇來看下App/Activity下的demos。
          第一個Animation,展示了從一個activity啟動另一個activity時的兩種動畫效果,主要是這個方法:
          1 overridePendingTransition(int enterAnim, int exitAnim)
          這個方法跟在startActivity()或者finish()之后調用來指定一個效果,第一個參數是下一個activity出現的效果,第二個參數是該activity退出的效果。
          關于animation,可以參考這篇文章:http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html
          第二個CustomDialogActivity,展示了一個activity如何使用自定義theme,使其看起來像一個dialog,在ApiDemos Manifest.xml中對應該activity的標簽下,
          有該屬性:android:theme="@style/Theme.CustomDialog",引用了一個自定義的theme,在styles.xml文件中:
          1 <style name="Theme.CustomDialog" parent="android:style/Theme.Dialog">
          2     <item name="android:windowBackground">@drawable/filled_box</item>
          3 </style>
          繼承自android內置的Theme.Dialog,位于/base/core/res/res/values/themes.xml。其background為一個自定義的shape,在filled_box.xml中:
          1 <shape xmlns:android="http://schemas.android.com/apk/res/android">
          2     <solid android:color="#f0600000"/>
          3     <stroke android:width="3dp" color="#ffff8080"/>
          4     <corners android:radius="3dp" />
          5     <padding android:left="10dp" android:top="10dp"
          6         android:right="10dp" android:bottom="10dp" />
          7 </shape>
          solid填充,stroke描邊,corners圓角,padding內間距,關于shape,可以看下這篇文章:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6087.html
          這兒分享一個展現漸變色背景的方法,除了ps一張漸變色的圖片,也可以使用shape,將上面代碼的<solid>標簽替換成<gradient>代表漸變:
          1 <gradient  
          2      android:startColor="#52adcd"  
          3      android:endColor="#1c87b1"  
          4      android:angle="0" /> <!-  angle代表角度,0就是從左往右漸變,可以多用幾個值試一試 。這個標簽不能和solid標簽同時出現。-!>
          第三個CustomTitle,如何自定義一個title,而不是使用一個activity原來的那種title,主要是3句代碼:
          1 requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
          2 setContentView(R.layout.custom_title);
          3 getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);
          第四個DialogActivity展示了如何使一個activity看上去像一個彈出的dialog,跟第二個實例類似,也是在其activity標簽上加上theme屬性,不過這次引用的
          是系統自己的dialog theme:@android:style/Theme.Dialog,其次跟第三個實例類似,也使用了requestWindowFeature()這個方法,關于這個方法,
          網上有很多介紹,大家可以自己搜一下,給個參考文章:http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html
          第五個看下PersistentState和SaveRestoreState,先說SaveRestoreState展示了onSaveInstanceState()保存activity狀態的效果,其實本身沒做什么,
          onSaveInstanceState()是當該activity可能會被系統destory時默認調用的,默認會記錄布局中每個view的狀態,如edittext的內容、checkedbox的選中狀態,
          你需要做的就是給每個控件加一個id,沒有id的話是無法保存狀態的,可以看下源碼PhoneWindow.java中的saveHierarchyState()。一般情況下不需要你重寫
          onSaveInstanceState(),但是如果你想保存除了UI狀態之外的其他附加信息,如一個成員變量的值等就可以覆寫,但要注意,一定要調用
          super.onSaveInstanceState(),以上都可以在官方文檔里找到。
          再說下PersistentState,這個展示了使用SharedPreferences持久化的保存edittext的狀態,包括光標的位置。主要是在onPause()里保存,onResume()里還原,
          不多說了,測試這兩個例子時,可以修改兩個edittext中的值然后旋轉手機,使其橫屏,這樣那個activity會destory然后再create。
          第六個看下ReceiveResult,主要展示了startActivityForResult()的用法,這個可以用于比如從一個activity跳到另一個activity去選擇一個email地址或是一張圖片,
          選擇完畢時結果再返回給上一個activity。我按照流程來介紹下這個方法的用法,ReceiveResult-->SendResult,首先先要調用
          startActivityForResult(Intent intent, int requestCode)啟動SendResult,然后在SendResult這個activity中處理,處理完調用setResult (int resultCode, Intent data),
          返回到ReceiveResult中,注意setResult()后要調用finish()。最后呢在ReceiveResult中要覆寫onActivityResult(int requestCode, int resultCode, Intent data)方法,
          來處理返回的結果,一些細節大家自己看看例子。關于requestCode,可以理解成A跳轉到B同時也可以跳轉到C或D,區分是跳到哪個activity;而resultCode,可以理解
          成B可以返回多個值,OK或NOT OK等,區分一個activity返回的多個值,可以去看下Redirection這個例子,加強對startActivityForResult()的理解。
          還有個知識點說下,在receiveResult的onCreate()中,mResults.setText(mResults.getText(), TextView.BufferType.EDITABLE);關于
          void android.widget.TextView.setText(CharSequence text, BufferType type)這個方法,可以參考這篇文章:http://litonggang.iteye.com/blog/507200
          最好結合源碼來看這個方法,從TextView的setText( CharSequence text, BufferType type ) --> Editable.java --> SpannableStringBuilder.java。實際上是將原來的
          的CharSequence text擴展成SpannableStringBuilder,以使其具有append等擴展的方法,這兒還有個工廠模式,有時間多讀讀源碼還是不錯的。
          第七個看下QuickContactsDemo,首先是QuickContactBadge這個控件,自己看下配置文件。接著是ResourceCursorAdapter,這個adapter繼承在CursorAdapter,它覆寫了
          CursorAdapter的newView()方法,其實就一句代碼,用Inflater填充指定的xml文件,所以在這個例子的newView()方法中首先調用super().newView()方法,將構造函數中指定的
          那個layout轉成view,然后bindView()里填充數據。最后是個viewHolder緩存layout中的view,viewHolder保證了對控件的緩存,減少了每次findViewById()的開銷,是優化listview的一個較好的方式。
          1 final static class ContactListItemCache {
          2         public TextView nameView;
          3         public QuickContactBadge photoView;
          4         public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);
          5  }
          6 ContactListItemCache cache = new ContactListItemCache();
          7 cache.nameView = (TextView) view.findViewById(R.id.name);
          8 cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge);
          9 view.setTag(cache);
          最后那3個activity,一個透明背景activity、一個透明并且模糊不清背景activity、一個用你的壁紙做背景的activity都使用了自定義的theme,可以自己看看,放到自己的應用中。
          這篇總結先到這,有些亂。

          posted on 2012-02-24 15:32 ZircoN 閱讀(1241) 評論(0)  編輯  收藏 所屬分類: Android ApiDemos


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          26272829123
          45678910

          導航

          統計

          公告

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阜城县| 利辛县| 永康市| 河间市| 阜阳市| 新密市| 千阳县| 安吉县| 光山县| 赫章县| 台安县| 汝城县| 甘肃省| 卢湾区| 长泰县| 雷波县| 尼勒克县| 且末县| 福贡县| 乌拉特中旗| 永春县| 舟山市| 曲阳县| 亚东县| 文登市| 河南省| 环江| 榆林市| 梧州市| 衡南县| 拜泉县| 贡嘎县| 如东县| 玉林市| 晋城| 招远市| 长宁县| 资中县| 镇雄县| 德令哈市| 石景山区|