Android軟件開發中的經驗總結

1. 如何讓APP不休眠

在需要不休眠的Activity的onCreate方法中,在setContentView()方法前加入以下語句:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
		WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

例如:

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	//////////加入以下語句////////////
	getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
			WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
	////////////////////////////////
	setContentView(R.layout.activity_main);
}

2. 如何讓應用顯示強制方向

在AndroidMainifest.xml文件中,在對應的Activity標籤下加入如下屬性:

android:screenOrientation="portrait" //強制豎屏
android:screenOrientation="landscape" //強制橫屏

3. 使用RadioGroup出現非互斥的情況

在使用RadioGroup構建的單選按鍵組中,通過對其中的某個RadioButton設置android:checked=“true”,如下所示:

<RadioGroup
        android:id="@+id/sex_radio_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/man" 
            android:checked="true"/>

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/woman" />
</RadioGroup>

各個單選按鍵理論上是互斥的(只有一個能選中),但上述的方式會出現兩個都能選中的情況。解決方法對每個RadioButton都設置id屬性

<RadioGroup
        android:id="@+id/sex_radio_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/man" 
            android:checked="true"
            android:id="@+id/man_radio_button"/>	//設置id

        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/woman"
            android:id="@+id/woman_radio_button" />	//設置ID
</RadioGroup>

4. 對於一個未顯示的View如何保存成Bitmap圖

由於需要保存的View還沒顯示,所以需要設置View的大小,整個過程如getBitmapFromView()方法所示:

private Bitmap getBitmapFromView(View v) {
	if (v == null) {
	  return null;
	}
	int measuredWidth = View.MeasureSpec.makeMeasureSpec(pictureWidth, View.MeasureSpec.EXACTLY);
	int measuredHeight = View.MeasureSpec.makeMeasureSpec(pictureHeight, View.MeasureSpec.EXACTLY);
	v.measure(measuredWidth, measuredHeight);
	int getMeasureWidth=v.getMeasuredWidth();
	int getMeasureHeight=v.getMeasuredHeight();
	//設置View的大小
	v.layout(0, 0, getMeasureWidth, getMeasureHeight);
	
	v.setDrawingCacheEnabled(true);
	v.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
	v.setDrawingCacheBackgroundColor(Color.WHITE);
	Bitmap bmp;
	//設置Bitmap對象的大小
	bmp = Bitmap.createBitmap(getMeasureWidth, getMeasureHeight, Bitmap.Config.RGB_565);
	Canvas c = new Canvas(bmp);
	
	v.draw(c);
	return bmp;
}

5. Bitmap生成圖片

將Bitmap對象保存成圖片的方法:

Bitmap cachebmp;
...//獲取Bitmap對象
//三個參數分別爲:格式(PNG、JPG等)、質量(1-100),指定文件的輸出流
//返回值爲boolean類型
boolean state=cachebmp.compress(Bitmap.CompressFormat.PNG, 90, fos);

6. AlertDialog顯示時,點擊空白處不消失

要使AlertDialog在顯示時,不會因爲點擊陰影部分消失,需要採用反射的方法修改其中的“mShowing”屬性,將其修改爲false即可。代碼如下:

AlertDialog alertDialog;
.....//alertDialog對象的獲取
try {
	Field field = alertDialog.getClass().getSuperclass().getDeclaredField("mShowing");
	field.setAccessible(true);
	field.set(alertDialog, false);
} catch (Exception e) {
	e.printStackTrace();
}

7. 保存文件到U盤時數據出錯或爲0k字節問題

這種現象經常出現在直接插拔U盤的情況下。這是由於通過FileWriter等方式寫入時,數據只在緩存中,還沒有真正寫入到flash,此時直接拔出U盤,導致數據寫入失敗。
解決方法是通過FileDescriptor對象進行同步,代碼如下:

FileInputStream fileInputStream=new FileInputStream(file);
FileOutputStream outFileOutputStream=new FileOutputStream(outFile);
FileDescriptor outFileDescriptor=outFileOutputStream.getFD();
int bufferSize=1024;
byte[] buffer=new byte[bufferSize];
int readSize=-1;
while((readSize=fileInputStream.read(buffer, 0, bufferSize)) != -1) {
	outFileOutputStream.write(buffer, 0, readSize);
}
outFileOutputStream.flush();
outFileDescriptor.sync();//確保寫入完成
fileInputStream.close();
outFileOutputStream.close();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章