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();