1. getWindowManager().getDefaultDisplay().getWidth()和getHeight获取的值和实际不同
在http://www.cnblogs.com/zdzyc/archive/2011/12/28/android.html找到答案:
AndroidManifest.xml文件中,加入supports-screens节点,具体的内容如下:
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" />
2. ArrayList<int[]> 用add()后再用get()结果不是预期的
注意点:add放入的是对象的引用,所以必须要每次都new新的引用
ArrayList<int[]> mFitGrid = new ArrayList<int[]>();
if(true)
{ //add放入的是对象的引用,所以必须要每次都new新的引用
int[] gridInfo = new int[3];
gridInfo[0] = 2;
gridInfo[1] = 4;
gridInfo[2] = 100;
mFitGrid.add(gridInfo);
int[] gridInfo2 = new int[3];
gridInfo2[0] = 4;
gridInfo2[1] = 5;
gridInfo2[2] = 200;
mFitGrid.add(gridInfo2);
int[] gridInfo3 = new int[3];
gridInfo3[0] = 5;
gridInfo3[1] = 6;
gridInfo3[2] = 300;
mFitGrid.add(gridInfo3);
}else{ //会导致get为最后一个
int[] gridInfo = new int[3];
gridInfo[0] = 2;
gridInfo[1] = 4;
gridInfo[2] = 100;
mFitGrid.add(gridInfo);
gridInfo[0] = 4;
gridInfo[1] = 5;
gridInfo[2] = 200;
mFitGrid.add(gridInfo);
gridInfo[0] = 5;
gridInfo[1] = 6;
gridInfo[2] = 300;
mFitGrid.add(gridInfo);
}
int size = 0;
size = mFitGrid.size();
System.out.println("size=" +size);
int[][] gridInfoRet = new int[size][];
for(int i=0; i<size; i++)
{
gridInfoRet[i]= mFitGrid.get(i);
System.out.println("val0="+gridInfoRet[i][0]+" val1="+gridInfoRet[i][1]+" val2="+gridInfoRet[i][2]);
}
3. 在LinearLayout中让多个Button均匀填满一行
在xml每个Button属性中增加android:layout_weight="1.0"
4. 计算2个日期之前相差的天数:(下面是计算当前时间和year/month/day之前的天数)
Calendar calendar = Calendar.getInstance(Locale.getDefault());
long timeCurr= calendar.getTimeInMillis();
Calendar calendarNext = Calendar.getInstance();
calendarNext.set(Calendar.YEAR, year);
calendarNext.set(Calendar.MONTH, month);
calendarNext.set(Calendar.DATE, day);
long timeNext= calendarNext.getTimeInMillis();
Date dateCurr= new Date(timeCurr);
Date dateNext= new Date(timeNext);
long days= (timeNext - timeCurr) / (long)(24*60*60*1000);
5. 将日期逐天增加
Calendar cal = Calendar.getInstance(Locale.getDefault());
cal.add(Calendar.DAY_OF_MONTH, +1);
6. 让widget响应日期设置更改
在AndroidManifest.xml增加DATE_CHANGED等intent-filter
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (Utils.getWidgetUpdateAction(context).equals(action)
|| action.equals(Intent.ACTION_TIMEZONE_CHANGED)||action.equals(Intent.ACTION_DATE_CHANGED)||action.equals(Intent.ACTION_LOCALE_CHANGED)) {
RemoteViews updateView = buildUpdate(context); //buildUpdate 为产生和日期相关view的自定函数
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
//一定要否则更新不了
appWidgetManager.updateAppWidget((new ComponentName(context, TodayLunarCalendar.class)), updateView);
} else {
super.onReceive(context, intent);
}
}
7.layout中同时存在 SurfaceView和组件View, 组件View显示不出来
要在SurfaceView的扩展类的构造函数中调用 setLayoutParams( new ViewGroup.LayoutParams( screenWidth, screenHeight));