2013年6月26日 星期三

解決 Export Signed Application Package... 出現 " ... is not translated in ..." 的問題

    今天想嘗試執行 Export Signed Application Package...時,出現  "... is not translated in..."的 Fatal Error,如下圖所示:

    而其實引起這個問題的原因與解法就寫在右邊的訊息視窗中,可以參考上面的圖示。而下面是我自己驗證過確實可以解決這個問題。

解法 一:
    執行 Window -> Preferences,點選 Android -> Lint Error Checking,
    將 Lint 的 Missing Translation 項目從 Fatal 改為 Warning. 如下圖所示:
   

解法 二:
     將 translatable="false" 加入倒出現錯誤訊息的字串中,如下圖所示:



[關鍵字]
Android is not translated in 

[參考鏈結]



如何新增 Android XML 檔案

      在很多時候我們需要自己新增 Android XML 檔案,例如要支援多國語言、針對不同的螢幕大小、或者螢幕操作的方向 (port直向 / land 橫向)...等等的替代選擇性資源內容。
      透過 ADT 的工具我們可以很簡單的建立新的 Android XML 檔案,方法如下:

1. 點選工具列的按鈕,如下圖所示:

2. 選擇要加入的資源型態:

3. 填入檔案名稱,這邊我們不需要填入副檔名,當建立後 ADT 會幫我加入。另外如果要建立替代選擇性資源,可按下圖的 Next 按鈕繼續設定裝置設定屬性。否則,直接按 Finish 即可在預設的資料夾(如: layout、value、drawable...etc. )內產生該檔案。

1-2. 如果不點選工具列的按鈕,也可以透過點選專案,右鍵-> Android Tools -> New Resources File... 來叫出 步驟 2 的新增 Android XML 對話框。


1-3. 步驟 2 的新增 Android XML 對話框的方式也可以透過點選專案,右鍵-> New-> Android XML File 來執行。

    另外,如果你想要新增的是翻譯,則可以透過 Android Graphical Layout 來快速產生簡單的替代選擇性資源資料夾 (只能設定 Language 與 Region,無法設定其他條件 如 ldpi/mdpi 或者 port/land...etc.)與空的 strings.xml 檔案,實際做法請參考下圖:





2013年6月20日 星期四

TextView - 顯示上下左右相反文字

     想要在 TextView 中將文字上下左右相反顯示可以將 android:scaleX 與 android:scaleY 屬性設定為 -1f 即可,程式碼如下:
    
<textview 
   android:id="@+id/tv" 
   android:layout_height="wrap_content" 
   android:layout_width="wrap_content" 
   android:scalex="-1f" 
   android:scaley="-1f" 
   android:text="@string/hello_world"/>
設定後的結果如下圖所示:

     另外除了直接透過設定 xml 檔案來完成上下左右文字的顯示,你也可以用 setScaleX(float)setScaleY(float)  方法在程式碼中做動態的設定。方法如下:

TextView tv = (TextView)findViewById(R.id.tv);
tv.setScaleX(-1f);
tv.setScaleY(-1f);

[參考連結]
http://www.javaworld.com.tw/jute/post/view?bid=26&id=309372

2013年6月12日 星期三

解決 Android Emulator 無法啟動的問題

      今天想要透過 Android Virtual Device Manager 啟動 AVD,但是啟動的過程發生警告的訊息如下:
       Starting emulator for AVD 'Android_4.0.3'
       WARNING: Data partition already in use. Changes will not persist!
       WARNING: SD Card image already in use: C:\Documents and    
       Settings\Josh\.android\avd\Android_4.0.3.avd/sdcard.img
       ko:Snapshot storage already in use: C:\Documents and
       Settings\Josh\.android\avd\Android_4.0.3.avd/snapshots.img
或者參考下圖

上網查了一些資料,也嘗試了一些方法但是目前唯一有效的就是在 "Using Eclipse for androidSDK, when I go to run, I get WARNING: Data partition already in use. Changes will not persist!" 看到的解決方法,就是刪除在 .android\avd\[your_device].avd 資料夾底下的所有
XXX.XXX.lock 的資料夾,請參考下面圖檔。 刪除後,模擬器終於又恢復作用囉。


2013年6月8日 星期六

ADT 設定 Preview All Screens 與 All Locales 查看所有Layout 與 語言的效果

        當我們要開發多國語言或者給多個不同螢幕大小裝置的 App 時,我們可以先透過 設定 Preview All Locales 與 Preview All Screens 來查看其顯示的效果。設定後的結果請參考下面的圖示。


利用 ImageView background 與 src 來合併兩張小 icon

     在某些情況下我們需要將兩張小 icon 合併來顯示成一張小icon。例如我們有很多 icons 而他們的背景圖示都一樣,只有中間的圖示不同,此時我們可以只準備一張背景圖示,另外準備其他不同的小圖示且其背景必須是 transparent 。一切準備好之後我們就可以設定利用background 與 src 屬性來設定圖示,來產生合併的效果,如下圖所示。

      上面圖示的 layout_width 與 layout_height 都是指定 wrap_content,最右邊的為 ImageButton,另外兩個則為 ImageView。使用 wrap_content 時,其 ImageView 大小視 backgroud 或 src 圖示中何者為大。也就是說當你準備的src 大於 background image時,background 圖示有可能被 src 的圖示所掩蓋而無法看出效果。

      另外 backgroud 與 scr的不同是, background 的圖示會根據 ImageView的大小做縮放,且不會保持原本圖示的比例,但是 src 則會保持 原圖的長寬比例做等比例的縮放。

     如果你不想讓 src 做等比例縮放,可以而外設定  android:scaleType="center" ,其效果可以參考中間的小圖示。最左邊圖示只簡單的設定 background 與 src 的圖示,可以看到 src 的圖示被等比例縮放了。

[其他參考鏈結]




移除 [Accessibility] Missing contentDescription attribute on image 的警告

       不知何時加入 ImageView 時 Eclipse 在編輯 XML 視窗或者 Graphical Layout 視窗都會出現 Lint 的警告提示,如下圖:

       該警告是從 ATD 16 以後當你沒有設定 contentDescription 屬性給  ImageButton 與 ImageView 時,Lint 會提出 Missing contentDescription attribute on image 的警告。

       contentDescription 屬性的作用主要是要提供一些眼睛不方便的使用者,當使用者移到該物件上面或者點選此物件時,Android  的 Accessibility service 就可以透過 TTS 播放出 contentDescription  中的敘述,這些使用者即使看不見,目前所點選到的物件提供甚麼樣的服務。 詳細的資料可以參考 Accessibility Making Applications Accessible

      即使你對這個警告不理會的話程式還是依然可以順利執行,如果你覺得這個警告非常礙眼又不想要花費腦筋給該物件適當的敘述,你可以很簡單的直接填入下面的敘述到 ImageButton 與 ImageView的屬性當中,即可移除該警告:

android:contentDescription="@null"


[其他參考鏈結]





2013年6月1日 星期六

API Demo Installation error: INSTALL_FAILED_VERSION_DOWNGRADE and INSTALL_FAILED_CONFLICTING_PROVIDER

       今天試著安裝 Android SDK 裡面的範例專案 API  Demo,編譯完後要安裝到 Emulator 時,在 Console windows 卻出現 Installation error: INSTALL_FAILED_VERSION_DOWNGRADE 的問題,在 "Android Emulator: Installation error: INSTALL_FAILED_VERSION_DOWNGRADE" 上找到了解決方法,解決的方式有兩種:

  1. 在 Emulator 上移除相同名稱的 App 程式
  2. 在 AndroidManifest.xml 中加入 android:versionCode,目前我設定為 2 即可,如果不行的話可以試著調高數值。
      但調完後雖然不會出現 INSTALL_FAILED_VERSION_DOWNGRADE 的錯誤訊息,卻跑出了  INSTALL_FAILED_CONFLICTING_PROVIDER 的錯誤訊息,幸好在 "Android: INSTALL_FAILED_CONFLICTING_PROVIDER" 裡面也找到解決方法。解決的方法就是在
AndroidManifest.xml 中修改 android:authorities 的內容,同時必須修改有使用到該 provider的 java 檔案。
     
      話說好不容易終於安裝到 Emulator 上,但是執行 Animation 範例總是出現 ANR,真是無言了,不曉得是不是電腦不夠力還是其他問題,Anyway 今天就先這樣囉。

透過Eclipse 更新 Plug-in 後出現 Type R cannot be resolved to a variable

      今天透過 Eclipse "Check for updates" 去更新一些 plugin 後,在編譯 Android 時總是出現 "Type R cannot be resolved to a variable" 的問題,如下圖所示:

      我確定更新前是可以編譯成功,但不知為何更新完後卻無法編譯 Android project 了,之前更新都沒有遇到這樣的狀況;回想起來更新完後 Eclipse 有跳出一個視窗,但內容我倒是沒去注意,想說跟以前一樣要我重新啟動 Eclipse ,沒想到這次踩到地雷了...Orz.
    幸好似乎有不少人有類似的情況,上網 Google 了一下找到了─"Type R cannot be resolved to a variable" after Android SDK updated"。
     解決方式就是開啟 Android SDK Manager,沒意外應該會出現有可更新項目,將那些項目更新後就解決問題了。

    發生 Type R cannot be resolved to a variable 有很多原因,最主要是因為 R.java 無法自動產生出來,但是為何無法產生可能要去查看看 res 目錄下是否有任何錯誤。
    下面鏈結我是從 "“R cannot be resolved to a variable”?" 討論串中擷取出來的,如果發生的症狀並非與上面一樣的話,或許可以從下面找到你要的解答。