持續更新中。。。
1 爲什麼按鈕XML綁定的點擊事件出錯,或者無效?
例如:
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
綁定了一個名爲 sendMessage的方法.
/** Called when the user touches the button */
public void sendMessage(View view) {
// Do something in response to button click
}
請仔細看以上代碼,有三個地方需要注意:
public void sendMessage(View view)
1 公有的
2 返回值爲void
3 唯一的參數爲View
2 開發widget 時,遭遇警告:Unable to launch app ...
Unable to launch app abc/10036 for broadcast Intent { act=android.appwidget.action.APPWIDGET_ENABLED cmp=ABC/.ClockWidget }: process is bad
查閱了相關資料,其中一種解決方法是:
我遵循了開發嚮導並在manifest中寫下了如下屬性,android:label="@string/app_name" ...
但是,要解決上面的那個問題的話,你需要
- Uninstall your app 卸載你的程序
- Reboot phone/emulator 重啓你的電話/仿真器
- Push new app without this attribute 去掉這個屬性,然後重新安裝
是的,這樣就好了,很神奇。
3 無法啓動郵件軟件& 啓動郵件後接收者丟失
在網上面,有人告訴你啓動郵件是通過 Intent.ACTION_SEND 來進行的
例如:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress});
intent.putExtra(Intent.EXTRA_SUBJECT, title);
intent.putExtra(Intent.EXTRA_TEXT, email_content);
但如果要正確的打開,應該加上一行:
intent.setType("plain/text");
或者
intent.setType("text/plain");
其中,第一種只會打開電郵,而第二種會打開各種程序(包括瀏覽器,微博,微信,短信,WIFI等等)
此外,要注意郵件地址可能存在多個,所以應該是字符串數組,即 String[]
4 代碼移植可能存在的問題
(1)Activity 可能未正確設置:
比如從一個工程中拿出一小塊來成立一個單獨的項目,或者將一個單獨的項目整合到工程中,下面這幾行需要增加或者刪除。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
有些Activity爲了防止被外部調用,增加了exported屬性,如果成爲了單獨的程序,而它又是啓動界面時,需要允許外部調用,即設爲true。
<activity
...
android:exported="false"
...>
</activity>
(2)自定義View未更新
請檢查XML佈局文件,確保你的佈局文件進行了更新。
(3)遺漏某些權限
移植時,一定要確保權限也隨之移動過去,否則相應的代碼得不到執行,會導致奇怪的錯誤。
5 Dialog錯誤: ExceptionMethod:setView ;
原因:
camera.stopPreview();
camera.release();前
沒有將setPreviewCallback 設置爲null,
解決辦法:
public void surfaceDestroyed(SurfaceHolder holder) {
camera.setPreviewCallback(null) ;
camera.stopPreview();
camera.release();
camera = null;
}
*此外,可能需要對camera.release();和camera = null;兩句做synchronized。
7.UnsatisfiedLinkError
NDK開發程序過程中,請勿隨意更改包名,否則會導致無法使用
8. [ .9.PNG出現問題
.9.PNG 點區域請使用2px及以上,使用1px的拉伸可能會出現問題
這個問題的根本原因是.9黑色拉伸指示區域(也就是四周的黑線)也會根據屏幕的dpi做縮放,
這就導致放在XHDPI下的只點一個點的.9.png可能在縮放到MDPI下時可能丟失信息
9. 動畫Animation在4.x系統上沒問題,但是在2.x系統上面就無法播放
可能是因爲你的View不可見導致的問題
在2.x系統上,對於不可見的物體,是無法使用View動畫的
10. android.content.res.Resources$NotFoundException
可能的原因:出現同名且指定錯誤。
例如你有一個abc.xml的layout文件,然後裏面的它包含一個View的id="@+id/abc"
然後你在代碼中使用了R.id.abc 而不是R.layout.abc 就可能導致這個問題。
11. 2.x系統上面TextView沒有Press效果, ImageView沒有Press效果
這是因爲這些View不是Button,某些系統認爲其不具有獲取點擊事件的能力。
所以你需要
(1)設置Clickable
在Xml中 android:clickable="true"
在Java代碼中 view.setClickable(true);
(2)將事件派發給父容器* (這一步是可選的,如果你爲父容器綁定了Onclicklistener)
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
MyParentView.this.performClick();
}
};
childView.setOnclickListener(listener);
12 View.setText(Html.fromHtml(getString(...))) 獲取字符串無多個空格
考慮方法一:
不使用getString(...) ,而是使用getResources().getText(id)
因爲getText會保留其中的格式。
缺點是:不可以帶參數。
考慮方法二:
在其中加入   這是一個與 不同的空格字符,它不會被String.trim()方法給幹掉,這就使得即使你通過getString(...)也能獲得正確的格式。
13 低版本的安卓系統上 margin無效的問題
參考資料:http://blog.csdn.net/fengye810130/article/details/9147695
在要設置Margin的View中加入android:layout_gravity="top|left",則Margin失效問題可以順利解決
但是,如果你不是marginTop 和marginLeft的話,請不要使用上面這種方式,而是直接在FrameLayout上面設置margin.
14 A fatal error has been detected by the Java Runtime Environment
這個是因爲android 編譯生成資源文件class出錯造成的問題
檢查並修復你的資源文件中的錯誤,然後點選clean,讓其重新編譯生成R.class
15 intentservice無法啓動問題:Unable to instantiate service 的解決辦法
由於通常採用的Intent 中帶有的參數是MyService.class 所以它通過反射方式啓動。
這就要求我們爲其提供一個無參數構造方法。
16 Android佈局文件中無法自動完成
*2個原因
1>打開的編輯器不對,導致了無法自動完成android layout Editor
解決方法:在Eclipse選擇特定的文件,右鍵,open with -> Android Common XML Editor (也有的版本是Android Layout Editor)
2>添加了自定義的佈局
這就意味者你創建了新的scheme,它是這樣的東西:
xmlns:app="http://schemas.android.com/apk/res/com.abc.xyz"
將該行刪除,將相關控件註釋起來,然後正確編譯
然後再恢復,就可以用自動完成功能了。