2014年8月24日 星期日

setContentView()時OOF

在manifast.xml中的application標籤
加入android:largeHeap="true"

可參考文章
http://hilary3113.iteye.com/blog/1766856

2014年8月21日 星期四

寫給大家的 Git 教學

http://littleb.tc/slides/2012/everyone/git.html
第三版
2012 Littlebtc (Hsiao-Ting Yu)
改寫自 Scott Chacon 的「Pro Git」電子書。

2014年8月19日 星期二

Library Project

最近準備要把專案整合
但是我對Android的Library非常不熟悉
之前弄老是出錯 而且還有各式各樣錯
所以就乖乖做個Test Cast
找出問題的點到底出在哪兒

於是我開了個專案 簡稱PA
再開了另一個專案 簡稱PB
我在PA的Activity中設了個按鈕
想要跳到了PB的Activity
萬事俱備後 我把PB調成is Library
然後調配PA的manifast
接下來開始Run

按鈕按下去 畫面閃了一下
我還是在PA的Activity
我檢查了一下我的Intent 並沒有出錯
卡了一段時間 我受不了把Eclipse關掉
然後在Run一次 結果就正常運行了

這根本是莫名其妙
哪有IDE要關掉重開才能正常跑的
不過今天早上才遇到Log跑不出來
結果Eclipse重開就好了...的這種鳥事

但是這種問題真的很誇張
我必需求證到底是 鬼月怪事多 還是Eclipse的問題
所以我又在開了個專案 簡稱PC
同樣發生了上述的怪事!
同樣發生了上述的怪事!
因為發生了兩次所以我也要說兩次
真的 關掉Eclipse 再開 就能正常跑了

雖然我過去學Android的時候就知道
Eclipse重開可以解決很多事情
但是這種的也太嚴重
開始對開源的東西感到有點無奈了  哈哈哈

2014年8月17日 星期日

AeryTimer

http://aery9527.pixnet.net/blog/post/183715679-java---%E7%B0%A1%E6%98%93%E8%90%AC%E7%94%A8%E8%A8%88%E6%99%82%E5%99%A8

計時器 可以固定每n毫秒做某件事情
或者是當計時器被停止時做另一件事情

要注意的是 計時器也是占用一個Thread
所以如果有要在計時器中操作UI的話
記得要用Handler或runOnUiThread來做額外處理

TextProgressbar

http://www.coderzheaven.com/2012/05/18/custom-progressbar-android-text-part-3/

Android的Progressbar是沒有搭配文字的
這邊有個客製化的TextProgressbar
可以使用文字(value/max之類...等等)

2014年8月15日 星期五

NumberPicker於xml設定最大最小值

想在AlertDialog做個自己的View
上面放2個NumberPicker來調整時間(MM:SS)
結果寫完才發現 NumberPicker於xml完全不給調整最大最小值
只能在Java寫 當下我整個傻眼

幸好找到這篇文章 找到了解決方案
就是寫一個客製化的NumberPicker 就可以設定了
參考以下文章 好文一篇!
http://stackoverflow.com/questions/12317960/android-numberpicker-set-min-max-default-from-xml

2014年8月11日 星期一

SlidingDrawer不因為其他View而影響拖拉範圍

<Relativelayout>

  <Linearlayout>
    <!--其他內容-->
  </Linearlayout>

  <Slidingdrawer>
    <!--SlidingDrawer的內容-->

  </Slidingdrawer>

</Relativelayout>

只要有LinearLayout框住其他的View
就不會產生SlidingDrawer因為其他View
而無法完全脫拉出來的問題

以最省記憶體的方式換背景

如果你在設定背景圖片時 發現出現記憶體不足的問題(Out of Memory 異常)
可以考慮使用以下的Code
// Minimize 類別
public class Minimize {
  /**
    * 以最省記憶體的方式來存取圖片
    *
    * @param context
    * @param resId
    * @return
    */
  private static Bitmap readBitMap(Context context, int resId) {
    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inPreferredConfig = Bitmap.Config.RGB_565;
    opt.inPurgeable = true;
    opt.inInputShareable = true;
    // 獲取圖片資源
    InputStream is = context.getResources().openRawResource(resId);
    return BitmapFactory.decodeStream(is, null, opt);
   }
 
  //將redId採取Bitmap 再轉成BitmapDrawable 就可以setBackground()了
  public static BitmapDrawable getBitmapDrawable(Context context,int redId){
    Bitmap bm = readBitMap(context, redId);
    BitmapDrawable bd = new BitmapDrawable(context.getResources(), bm);//轉換成Drawable
    return bd;
   }
  }
  //之後設定背景
  RelativeLayout background = (RelativeLayout) findViewById(R.id.map);
  background.setBackground(Minimize.getBitmapDrawable(this,
    R.drawable.map_relaxbg));

2014年8月4日 星期一

設定全螢幕及設定橫向

//在AndroidManifast.xml中的activity加入
<activity
            android:name="com.hifive.toystage.ToyActivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar" >


  //以下方法並不適用 他會先出現標題之後再轉成無標題的怪異行徑
  //若要採用 請記得放至setContentView()的前面
  
  private void setWindows() {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);//設定全螢幕
    requestWindowFeature(Window.FEATURE_NO_TITLE);//設定無標題
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//設定橫向
  }

拖曳物件

http://gundumw100.iteye.com/blog/924886

Collision Checking 碰撞偵測

http://blog.csdn.net/zeroblack/article/details/16867821

Service & BroadcastReceiver

Service大彙總

Started Service

Bind Service

當Acitivty退出 Service也會持續運作的方法

備註 : 新增Service記得要註冊


BroadcastReceiver大彙總

BroadcastReceiver完整介紹

Intent的Action大全

備註 : 動態註冊法在onCreate()中註冊比較好 然後在onDestory中進行銷毀。
另有一說是在onResume()註冊 然後在onPause銷毀

若使用使用靜態註冊法 記得在AndroidManifest.xml加入權限
靜態註冊法加入方法為:
AndroidManifest.xml -> Application -> 加入一個Receiver並將Name設定好 ->
再往剛剛設定好的Receiver加入Intent Filter ->
再往剛剛設定好的Intent Filter加入Action ->
設定Action 的Name

SQLite Foreign Key

CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f);
CREATE UNIQUE INDEX i1 ON parent(c, d);
CREATE INDEX i2 ON parent(e);
CREATE UNIQUE INDEX i3 ON parent(f COLLATE nocase);

CREATE TABLE child1(f, g REFERENCES parent(a));
-- Ok
CREATE TABLE child2(h, i REFERENCES parent(b));
-- Ok
CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d));
-- Ok
CREATE TABLE child4(l, m REFERENCES parent(e));
-- Error!
CREATE TABLE child5(n, o REFERENCES parent(f));
-- Error!
CREATE TABLE child6(p, q, FOREIGN KEY(p, q) REFERENCES parent(b, c));
-- Error!
CREATE TABLE child7(r REFERENCES parent(c));
-- Error!