編輯:關於Android編程
重構了下之前自己的一個新聞客戶端,全部使用了Fragment來進行頁面切換,只有一個入口Activity作為程序的啟動Activity,其中有一個界面需要調用攝像頭識別二維碼,於是就會用到SurfaceView進行預覽,那麼問題來了,當切換到對應的Fragment時,屏幕會黑一下,黑了1秒左右就顯示出正常的界面,而且這種現象只有第一次進入該Fragment才會出現,之後進入都不會出現,解決方法是無意在github上看到了,試了一下,可以行的通,下面貼出解決方法。
方法一、在Activity的onCreate中添加如下代碼
getWindow().setFormat(PixelFormat.TRANSLUCENT);
但是如果你在fragment裡這麼做貌似是行不通的。
方法二、在activity 的 root view 裡面 加入一個 長寬都是0px的並且不可見SurfaceView元素 。
原因:
SurfaceView因為不同於一般的view,它有自己良好的緩沖以及數據存取機制,系統對他有特殊處理。當surfaceview第一次在當前activity上添加的時候,系統會給WindowManager重新排布局,relayout,這樣就會黑一下,這個只會出現在第一次,以後再添加surfaceview時就不會黑屏了。
而自己項目中,由於全部使用fragment進行切換頁面,只有一個activity聲明在清單文件中,但是代碼中是可以配置是否新開activity作為fragment容器的,由於我不想再這個activity中增加代碼getWindow().setFormat(PixelFormat.TRANSLUCENT);,於是我使用了新開activity作為這個fragment的容器,於是問題也得以解決。
有閃屏的代碼是這樣的
private static final int REQUEST_CODE_SCAN = 1;
openPageForResult(scan,null,CoreAnim.slide,REQUEST_CODE_SCAN);
但是這個函數有一個重載函數就是是否新開activity,這裡使用重載函數進行解決
private static final int REQUEST_CODE_SCAN = 1;
openPageForResult(true,scan,null,CoreAnim.slide,REQUEST_CODE_SCAN);
函數原型
/**
* 打開fragment並請求獲得返回值,並設置是否在新activity中打開
* @param newActivity 是否新開activity
* @param pageName 頁面名
* @param bundle 參數
* @param coreAnim 動畫
* @param requestCode 請求碼
* @return 打開的fragment對象
*/
public final Fragment openPageForResult(boolean newActivity, String pageName, Bundle bundle, CoreAnim coreAnim, int requestCode);
本文實例實現一下 RecyclerView,代碼比較簡單,適合初學者,如有錯誤,歡迎指出。復習 ListView可以查看這篇文章深入淺出學習Android ListVie
說實話,關於Android中對短信的一些相關操作是一個比較入門的東西。那我現在還要來寫這一篇博客的原因只是因為現在開發中有相關內容,而又想將這些東西分享給更多的人來學習,
一、 MonkeyRunner簡介monkeyrunner也是一款安卓sdk自有的測試工具,開源,位於\sdk\tools下面,它主要做性能測試,回歸測試,並且可以自定義
在如今的互聯網時代,微信已是一個超級App。這篇通過ViewPager + Fragment實現一個類似於微信的界面,之前有用FragmentTabHost實現過類似界面