launcher3时钟小部件

  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"




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值