packages\apps\Launcher3\res\xml\default_workspace.xml
<!--appwidget 指针图形
launcher:packageName="com.android.deskclock"launcher:className="com.android.alarmclock.AnalogAppWidgetProvider"
launcher:screen="2"
launcher:x="1"
launcher:y="0"
launcher:spanX="3"
launcher:spanY="3" /-->
<appwidget 数字版
launcher:packageName="com.android.deskclock"
launcher:className="com.android.alarmclock.DigitalAppWidgetProvider"
launcher:screen="2"
launcher:x="1"
launcher:y="0"
launcher:spanX="6"
launcher:spanY="3" />
数字版的 字体
在packages\apps\DeskClock\res\layout\digital_widget_time.xml
字体大小 修改digital_widget_time.xml是改变不了的,要在代码里改。
packages\apps\DeskClock\src\com\android\alarmclock\DigitalAppWidgetProvider.java
private void updateClock(
...
WidgetUtils.setTimeFormat(widget, 0/*no am/pm*/, R.id.the_clock);
WidgetUtils.setClockSize(context, widget, ratio);
...
)
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager,
int appWidgetId, Bundle newOptions) {
// scale the fonts of the clock to fit inside the new size
float ratio = WidgetUtils.getScaleRatio(context, newOptions, appWidgetId);
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
updateClock(context, widgetManager, appWidgetId, ratio);
}
ratio比率在控制着大小,WidgetUtils.java中
public static float getScaleRatio(Context context, Bundle options, int id) {
if (options == null) {
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
if (widgetManager == null) {
// no manager , do no scaling
return 1f;
}
options = widgetManager.getAppWidgetOptions(id);
}
if (options != null) {
int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
if (minWidth == 0) {
// No data , do no scaling
return 1f;
}
Resources res = context.getResources();
float density = res.getDisplayMetrics().density;
float ratio = (density * minWidth) / res.getDimension(R.dimen.min_digital_widget_width);
// Check if the height could introduce a font size constraint
int minHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
if (minHeight > 0 && (density * minHeight)
< res.getDimension(R.dimen.min_digital_widget_height)) {
ratio = Math.min(ratio, getHeightScaleRatio(context, options, id));
}
return (ratio > 1) ? 2 : ratio; //返回你的尺寸
}
return 1;
}
或者在WidgetUtils.java中
public static void setClockSize(Context context, RemoteViews clock, float scale) {
float fontSize = context.getResources().getDimension(R.dimen.widget_big_font_size);
System.out.println("\n-----------------xun--------------------fontSize ="+fontSize);
clock.setTextViewTextSize(
R.id.the_clock, TypedValue.COMPLEX_UNIT_PX, (fontSize+100) * scale);
}
(fontSize+100)尺寸大小。
但是在 WidgetUtils.java 里的clock.setTextViewTextSize 反应是要时间的,就是开机时,在桌面的时候并不是你设置的尺寸,要过几秒钟才反应过来。所以,要用另一种方法,就是把
public static void setClockSize(Context context, RemoteViews clock, float scale) {
float fontSize = context.getResources().getDimension(R.dimen.widget_big_font_size);
System.out.println("\n-----------------xun--------------------fontSize ="+fontSize);
// clock.setTextViewTextSize(
// R.id.the_clock, TypedValue.COMPLEX_UNIT_PX, (fontSize+100) * scale);
}
clock.setTextViewTextSize注释掉。在 digital_widget_time.xml 里的 TextClock 用android:textSize="230dp" 设置。
由于把字体放大了,当你从appwidget里拖出来的时候,会被隐藏部分。系统默认是2x2的布局
packages\apps\DeskClock\AndroidManifest.xml
<receiver android:name="com.android.alarmclock.DigitalAppWidgetProvider" android:label="@string/digital_gadget"
android:icon="@mipmap/ic_launcher_alarmclock">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="com.android.deskclock.ON_QUARTER_HOUR" />
<action android:name="android.intent.action.DATE_CHANGED" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.LOCALE_CHANGED" />
<action android:name="android.intent.action.ALARM_CHANGED" />
<action android:name="com.android.deskclock.worldclock.update" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/digital_appwidget" />
</receiver>
packages\apps\DeskClock\res\xml\digital_appwidget.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="660dip"
android:minHeight="@dimen/min_digital_widget_height"
android:updatePeriodMillis="0"
android:previewImage="@drawable/appwidget_digital_clock_preview"
android:initialLayout="@layout/digital_appwidget"
android:resizeMode="vertical|horizontal"
android:minResizeWidth="660dip"
android:minResizeHeight="@dimen/min_digital_widget_resize_height"
android:widgetCategory="keyguard|home_screen"
>
</appwidget-provider>
修改大小
android:minWidth="660dip"
android:minHeight="@dimen/min_digital_widget_height"