- Android開發(fā)常見問題及解決方法(二)
- 發(fā)布時間:2016/1/13 來源:搜數(shù)網(wǎng)絡(luò) 瀏覽:37
1.自定義title欄。
首先要z在values->styles中定義一個style,然后在mainfest文件中設(shè)置android:theme.
最后在Activity中按照這個順序?qū)懀?/span>
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.activity_main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_layout);
2.SQLite isFirst和isBeforeFirst方法的區(qū)別:
看下面一段代碼
Cursor c = queryTheCursor(type);
if(c.moveToLast())
while (!c.isBeforeFirst()) {
String tmpContent = new String();
tmpContent = c.getString(c.getColumnIndex("content"));
contents.add(tmpContent);
c.moveToPrevious();
}
c.close();
代碼的作用是逆序輸出表中的內(nèi)容,第三行如果用的是isFirst()的話就無法輸出第一行,正確做發(fā)是用isBeforeFirst()。
3.eclipse刪除空行
在eclipse中刪除某一行就用ctrl+D快捷鍵。如果你想刪除一個文件中的所有空行呢。
可以用下面方法。
1)打開源碼編輯器
2)使用快捷鍵Ctrl+f
3)在Find輸入框中輸入:^\s*\n
4)Replace With輸入框的值為空
5)在【Options】選中的"Regular expressions"
6)點擊【Replace All】按鈕。
7)OK!
4.getX()和getRawX()的區(qū)別
getX()是表示W(wǎng)idget相對于自身左上角的x坐標(biāo)
而getRawX()是表示相對于屏幕左上角的x坐標(biāo)值(注意:這個屏幕左上角是手機屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一樣的道理
5.imagView居中顯示問題
xml設(shè)置如下:
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myImageView"
android:layout_gravity="center"
android:scaleType="matrix"
android:src="@drawable/pic" >
6.synchronized引發(fā)了 java.util.ConcurrentModificationException
如果多個線程同時訪問一個 ArrayList 實例,而其中至少一個線程從結(jié)構(gòu)上修改了列表,那么它必須 保持外部同步。
解決方法:初始化的時候 將ArrayList改為CopyOnWriteArrayList;
原理:
JAVA中將引用從一個對象移到另外一個對象不需要消耗CPU時間,可以看做是一個原子操作。
JAVA中如果一個對象仍舊存在引用,則不會被CG回收。
CopyOnWriteArrayList就是根據(jù)以上兩個特點,在列表有更新時直接將原有的列表復(fù)制一份,并再新的列表上進行更新操作,完成后再將引用移到新的列表上。舊列表如果仍在使用中(比如遍歷)則繼續(xù)有效。如此一來就不會出現(xiàn)修改了正在使用的對象的情況(讀和寫分別發(fā)生在兩個對象上),同時讀操作也不必等待寫操作的完成,免去了鎖的使用加快了讀取速度。
7.獲取隨機顏色
并不用每次都生成三個隨機數(shù),下面兩條語句就可以了:
Random myRandom=new Random();
int ranColor = 0xff000000 | mRandom.nextInt(0x00ffffff);
8.去掉Activity的標(biāo)題欄,全屏顯示
在manifest文件中修改對應(yīng)的Avtivity屬性。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
9.如何修改應(yīng)用名稱及應(yīng)用圖標(biāo)
修改程序的圖標(biāo),修改drawable文件夾的i→→c_launcher.png圖標(biāo),把新的圖標(biāo)改名覆蓋就可以了。
如果你要自己的名稱,可以修改AndroidManifest.xml的這個節(jié)點,application android:icon="@drawable/ic_launcher",不需要加文件擴展名。
即使這么做了,真機調(diào)試的時候可能還是會有一些問題,比如圖標(biāo)沒辦法改變,這個時候就需要在Eclipse中新建一個不同名的項目,然后轉(zhuǎn)移代碼(有點小麻煩~_~!)。
10.關(guān)于調(diào)試方法
調(diào)試的時候程序如果出錯,一般是查看logcat,看error發(fā)生的地方,會提示在程序的第幾行,然后去找就可以了。
但有些錯誤沒辦法定位,那就把日志輸出成txt,然后去google,baidu吧。
11.Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
錯誤1:請求的字段在數(shù)據(jù)庫的表中不存在,一般是大小寫沒寫對;
錯誤2:編程的中途改變表的字段,實際字段并沒有改變,解決方法是卸載當(dāng)前版本,再安裝調(diào)試。
12.android.content.res.Resources.loadXmlResourceParser
在傳遞string類做參數(shù)的地方傳了int形變量。
13.android.content.res.Resources$NotFoundException
出現(xiàn)此類異常時,可以根據(jù) Resource ID到資源類R中找相關(guān)的資源。比如0x7f030000,對應(yīng)的是city_item布局文件,就可以將問題縮小到更小的范圍。對于這類運行時找不到資源,但資源又確實存在的問題,可能的編譯打包時出現(xiàn)問題,沒有將該資源加入??尚薷囊幌略撡Y源,讓編譯器重新編譯。
還有試一下Project ->Clean一下這個項目 也可以的。