2013年8月25日 星期日

[Android] rating bar size

Error

使用 minHeight and maxHeight 會切掉星星。


Solution

android:scaleX="0.8"
android:scaleY="0.8"

可以縮小 但效果不佳 難以控制位置

最好的方式 直接使用希望呈現的大小圖片



* Reference
- How to set the custom size of the stars in RatingBar
- android ratingbar size

[SQL] Index

in, like 不會使用 index


[Android] tag requires a 'drawable' attribute or child tag defining a drawable

Error Message

想在 selector 中使用顏色做為 drawable

<item> tag requires a 'drawable' attribute or child tag defining a drawable


Solution

要放在 /res/color/list_item_selector.xml



   
   
   
   





[Android] Could not open Selected VM debug port (8700). Make sure you do not have another instance of DDMS or of the eclipse plugin running....

Error Message

Could not open Selected VM debug port (8700). Make sure you do not have another instance of DDMS or of the eclipse plugin running. If it's being used by something else, choose a new port number in the preferences.



Solution

Window -> Preferences -> Android -> DDMS

- Set Base local debugger port to "8601"
- Check the box that says "Use ADBHOST" and the value should be "127.0.0.1"


[Android] The connection to adb is down, and a severe error has occured....

Error Message

The connection to adb is down, and a severe error has occured.
You must restart adb and Eclipse.
Please ensure that adb is correctly located at 'D:\sdk\platform-tools\adb.exe' and can be executed.


Solution

找到工作管理員中的 adb.exe 執行中的 process
關閉 adb.exe
重啟 eclipse



* Reference
- Android故障排除_The connection to adb is down, and a severe error has occured.
- Android : The Connection To Adb Is Down, And A Severe Error Has Occurred.

[SQL] ORA-00932: 不一致的資料類型: 應該是 -, 但為 CLOB

Error Message

ORA-00932: 不一致的資料類型: 應該是 -, 但為 CLOB



Solution

當 field type is lob

可以寫

... where field like xxxx

但不能寫成

... where field = xxxx




[Android] Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY

Error Message

Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY


Solution

在 local 設定 external build path 使用 library xxxx

並在 AndroidManifest.xml 宣告

<uses-library android:name="xxxx">

使用系統上共用的 library.


[Spring] Neither BindingResult nor plain target object for bean name ''

Error Message

RequestContextAwareTag.java org.sprin
rk.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:86) ERROR - Neither BindingResult nor plain target object fo
ame 'loginForm' available as request attribute
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'loginForm' available as request attribute
at org.springframework.web.servlet.support.BindStatus.(BindStatus.java:141)
............
............
............



Solution

因為沒有指定 jsp form modelAttribute 所對應的物件

ex:

// Controller
public String login(Map model) {
model.put("login", new new LoginForm());
}


// JSP
<form:form method="POST" modelattribute="login">


* Reference
- Neither BindingResult nor plain target object for bean name available as request attribute
- Spring MVC – Neither BindingResult Nor Plain Target Object For Bean Name ‘Xxx’ Available As Request Attribute.

[Android] AdapterView


  • after set adapter default select position 0.
  • 若被選的位置和原本的相同 那麼不會觸發 onItemSelected.

  • setSelection(position)
    • position 那個 item 會被移動到 top (not touch mode)
  • getChildAt(index)
    • index: 畫面的位置。
    • 所以如果 index 是在不可視的位置 可能會得到 null。



* Related post:
[ListView] The World of List View
[Android] ListView Tips

2013年6月1日 星期六

[Android] AsyncTask

AsyncTask from API 1.5+
不過事實上 1.0 and 1.1 上也有此功能 只是 API 為 UserTask

Lifecycle
  • activity 結束時 AsyncTask 會繼續執行直到完成,然後呼叫 onCancelled(Result result)或 onPostExecute(Result result),然而因為 activity 已不在,所以 AsyncTask 也無法做接下來的工作。
  • 所以希望能在 activity 結束前先取消 AsyncTask,因此呼叫 cancel(boolean mayInterruptIfRunning),mayInterruptIfRunning 表示是否中斷 執行 thread。


cancel() 不總能正確的發揮效用?!
  • cancel(false): 工作不會被中斷並完整執行完,但執行完後不會呼叫 onPostExecute()
  • cancel(true): 只是會試著盡早中斷我們的工作,若是遇到不可被中斷的工作(ex: BitmapFactory.decodeStream()) 就仍然會執行完。


Memory leaks
AsyncTask 會執有 activity reference。


Serial or parallel?? It depends on the API level.
假設執行下列兩個 task:

new AsyncTask1().execute();
new AsyncTask2().execute();

Before API 1.6 (Donut): Serial
等 task1 執行完才會再執行 task2。
=> performance problems.

API 1.6 to API 2.3 (Gingerbread): Parallel
同時執行在不同的 worker thread。
=> concurrency issues.

API 3.0 (Honeycomb) until now: Serial or parallel
public static void execute(AsyncTask as) {
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1) {
        as.execute();
    } else {
        as.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }
}

* Reference - The dark side of AsyncTask

[Android] View Animation attributes

Translate
  • 執行次數: android:repeatCount="2"
    • 會連原本的一次,所以會執行三次。
  • 移動距離
    • 0: 表示目前位置,距離是相對位置,往上/左是 -,往下/右是 +。
    • -100%p: 上/左; 100%p: 下/右。
      • android:fromYDelta="-100%p" 上
      • android:fromXDelta="0" android:toXDelta="-100%p" 往左邊消失
      • android:fromXDelta="-100%p" android:toXDelta="0" 從左邊進
      • android:fromXDelta="0" android:toXDelta="100%p" 往右邊消失
      • android:fromXDelta="100%p" android:toXDelta="0" 從右邊進
  • 没有指定 fromXType toXType fromYType toYType 時候, 默許是以自己為相對参照物。


Scale
  • fromXScale/toXScale/fromYScale/toYScale
    • 動畫開始與结束時的縮放比例。
  • 縮小 < 1.0 (無變化) < 放大。 
  • pivotX/pivotY: 缩放時的中心。
    • 0.5 or 50% 為 X 或 Y 座標上的中點位置。 


Rotate
  • fromDegrees/toDegrees: 動畫開始結束時旋轉的角度。
  • 逆時針 < 0 < 順時針。 
  • (-, +): 順時針旋轉。 
  • (-, -): 逆時針旋轉。 
  • (+, +): 順時針旋轉。 
  • (+, -): 逆時針旋轉。 
  • pivotX/pivotY: 旋轉時的中心。 
    • 數字: 相對於自己左邊的 pixel 位置。
    • num%: 相對於自己左邊或上邊的百分比。 
    • num%p: 相對於 parent 左邊或上邊的百分比。 


* Reference
- View Animation
- 详解Android动画之Tween Animation

2013年5月15日 星期三

TFT-LCD vs. OLED vs. PMOLED vs. AMOLED vs. Super AMOLED

TFT-LCD
  • 在 AMOLED 出現之前,佔最大量比例的螢幕技術。
  • 兩塊玻璃中間夾著液晶,就像計算機或是電子錶的螢幕那樣(非彩色的),LCD本身不發光,我們之所以能看到螢幕成像,是因為螢幕後面還有一層背光模組將光線透過玻璃讓我們看見各種顏色,所以螢幕有兩層
  • LCD 面板加上背光模組再怎麼薄也薄不過本身就會發光的螢幕面板吧! 因此OLED技術就慢慢抬頭。

OLED = 有機發光二極體。
  • 使用黑色畫面能有省電的效果。
  • 因為每個 pixel 都會發光,越亮則需要更多能量

PMOLED = Passive Matrix OLED

AMOLED = Active Matrix OLED
  • 自發光的OLED技術,在原有的 TFT-LCD 技術上加引延伸發展。
  • ex: Google Nexus、Galaxy S2、Galaxy Tab。
  • 缺點:
    • 在大太陽下看不清楚畫面。
    • 螢幕顏色雖然豔麗,但是還原不夠真實,時常在拍照後從手機螢幕上看起來很好看,實際存到電腦後才發現顏色不對。
    • 烙印問題。
      • 由於 AMOLED 每個像素都會自己發光,因此不像 TFT-LCD 那樣一整片背光,即使年久老化後也只會整片光度不如以往;
      • 但是 AMOLED 每個像素都有自身的壽命,如果某塊區域長期顯示高光源,便會老化得比周圍像素快很多,就像燈泡點愈久光度愈暗那樣,造成圖像像是印在螢幕上,也就是烙印的原因。
      • 最常出現烙印的區域是螢幕最上方的通知列,因為這裡的像素使用率較其他區域低,所以很容易產生烙印。
  • 優於 TFT-LCD 的原因:
    • 更優異的視角。
    • 色彩對比。
    • 反應速度。
    • 因為不需背光模組,因此成本更低,也比較省電。
  • 比 PMOLED 適合用在手機或平板裝置上,優點有:
    • 耗電量低
    • 更新時間快
    • 反應速度快


Super AMOLED
  • 比原來的技術更亮(約提昇 18%), 顏色更鮮艷。
  • 將觸控層由原本分離的構造整合進螢幕本身,達到更輕薄的目標。
  • 優點:
    • 耗電量更低,亮度也愈亮。
    • 傳統的三原色 RGB 顯示方式是除了三個原色的互相搭配調出來的各種顏色,還有三原色全開的白色與三原色全關閉時的黑色;
    • 不過 Super AMOLED 使用了新的子像素排列方式,稱為「PenTile」,相比傳統的 RGB 更多了一個白色子像素,因此即使是顯示純白色的畫面都不需將所有顏色全開,只要單純顯示白色就好了。
  • 缺點:
    • PenTile 的排列方式會造成文字周圍有毛邊鋸齒。
    • 畫質下降。
      • PenTile 的每個單獨子像素都可以與鄰近的子像素搭配來產生顏色,不必像傳統 RGB 一定得 3 個子像素同時運作;
      • 如此一來即可最少以 2 種顏色來搭配顯示,達到近似的效果。既然可以用 2 色即可達成顯色目標,那不顯示的子像素當然會對畫質產生影響。


* Reference
- 讓手機畫面更鮮艷的AMOLED螢幕顯示技術 | T客邦 - 我只推薦好東西
- T小編烙行話:AMOLED 怎麼讀?Kepler 又是啥?
- Battery Saver Tips & Tricks - How to extend your Android's battery!

2013年5月14日 星期二

[Android] onSaveInstanceState/onRestoreInstanceState

  • 在離開畫面時 onSaveInstanceState() 會被呼叫並保存下當時畫面狀態於 bundle 中,以預防此畫面被不預期關閉; 這樣要重新開啟時,onRestoreInstanceState() 能藉由保存下來的資料來回到關閉前的狀態。
  • 預設會保留住 setContentView 狀態 (ex: 輸入值)。
  • onSaveInstanceState 一定會發生在 onStop 前 但不一定是在 onPause 前或後。
  • 從 Honeycomb 開始 在收到 onStop 回傳前 都不是 kiiable status 這時 onSaveInstanceState 可能會在 onPause 後才被呼叫。

Activity a to Activity b running orders:
  • Open b in a
    • a: onSaveInstanceState -> onPause -> onStop
  • Change orientation:
    • a: onSaveInstanceState -> onPause -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
  • Open b with dialog theme in a:
    • a: onSaveInstanceState -> onPause (因為還能看到 a 所以不會呼叫 onStop()!)


以下狀態下不會呼叫 onRestoreInstanceState
  • 從程式集開啟 app 時。
    • onCreate -> onStart -> onResume
  • 從 Activity b 返回 Activity a。
    • onRestart -> onStart -> onResume


* Reference
- onSaveInstanceState
- onRestoreInstanceState

[Linux] shell

當你要電腦傳輸出來『音樂』的時候,你的電腦需要什麼東西呢?
  • 硬體:當然就是需要你的硬體有『音效卡晶片』這個配備,否則怎麼會有聲音;
  • 核心管理:作業系統的核心可以支援這個晶片組,當然還需要提供晶片的驅動程式囉;
  • 應用程式:需要使用者 (就是你) 輸入發生聲音的指令囉!
步驟:
  1. 你必須要『輸入』一個指令之後,『硬體』才會透過你下達的指令來工作!
  2. 透過『 Shell 』將我們輸入的指令與 Kernel 溝通,kernel 控制硬體工作。

from http://linux.vbird.org/linux_basic/0105computers/os_01.gif

  • 只要能夠操作應用程式的介面都能夠稱為殼程式。
  • 狹義的殼程式指的是指令列方面的軟體,ex: bash 等; 廣義的殼程式則包括圖形介面的軟體。
  • 殼程式可以呼叫其他軟體。
    • ex: man, chmod, chown, vi, fdisk, mkfs 等等指令。
      • 這些指令都是獨立的應用程式,透過殼程式 (就是指令列模式) 來操作這些應用程式,讓這些應用程式呼叫核心來運作所需的工作。
  • shell 可分為多種:
    • 在 Sun 裡頭預設的 C SHell、 商業上常用的 K SHell、 TCSH 等等。
    • 至於 Linux 使用的這一種版本就稱為『 Bourne Again SHell (簡稱 bash) 』。
    • 是 Bourne Shell 的增強版本,也是基準於 GNU 的架構下發展出來的!


* Reference
- 鳥哥的 Linux 私房菜 -- 學習 bash shell

2013年5月12日 星期日

[Graphic] Vector Drawables

Drawable 分為兩類:


Bitmap Drawables
  • Bitmap files, ex:
    • PNG which are rendered as images by the OS.
    • 9-patch bitmaps which enable the OS to anamorphically distort the image to fit a particular region.
Vector Drawables
  • Consist of XML files which contain some basic vector drawing command which the OS renders dynamically at runtime.
  • 缺點:
    • Require more processing power to render,particularly gradients; 
    • The drawing primitives are not as flexible as those in your favorite image manipulation software.


兩種差異是單一的 vector drawable 在不同顯示規格下的縮放表現較好(a single vector drawable will scale much better on a variety of different display types)。


* Reference
- Vector Drawables – part 1