android-下拉通知栏日期显示

本文介绍了如何在Android系统中自定义下拉通知栏的日期显示,包括只显示月日星期、显示年月日星期、双行显示年月日星期的方法,并涉及到XML配置、日期格式化和布局调整等技巧。

4.3

(代码修改时注意包的导入)

1:只显示月日星期几的DateView:


DateView.java

触发日期更新:
    private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (Intent.ACTION_TIME_TICK.equals(action)
                    || Intent.ACTION_TIME_CHANGED.equals(action)
                    || Intent.ACTION_TIMEZONE_CHANGED.equals(action)
                    || Intent.ACTION_LOCALE_CHANGED.equals(action)) {
                updateClock();
            }
        }
    };


         //日期更新
         protected void updateClock() {  
//dateFormat-时间格式
/*system_ui_date_pattern定义在donottranslate。xml文件中,对应是
只有月日星期
<!-- @hide DO NOT TRANSLATE. ICU pattern for "Mon, 14 January" -->
         <string name="icu_abbrev_wday_month_day_no_year">eeeMMMMd</string>
         <!-- @hide DO NOT TRANSLATE. date formatting pattern for system ui.-->
         <string name="system_ui_date_pattern">@string/icu_abbrev_wday_month_day_no_year</string>
*/
/*
         eeeMMMMd:
"d"代表年月日星期几中的“日”;
“eee”代表年月日星期几中的“星期几”;
“MMMM”代表年月日星期几中的“月”;
*/
        final String dateFormat = getContext().getString(R.string.system_ui_date_pattern);
        final Locale l = Locale.getDefault();  //获得当前语言环境
        String fmt = ICU.getBestDateTimePattern(dateFormat, l.toString());
        SimpleDateFormat sdf = new SimpleDateFormat(fmt, l);
        setText(sdf.format(new Date()));

另外:
/*
         Locale.getDefault()该方法检测当前语言环境并随之动态变化;
*/
/*Date.java
public Date() {
        this(System.currentTimeMillis());
        }
*/
    }



2:显示年月日星期几

修改方法:

1>:修改xml文件<string name="icu_abbrev_wday_month_day_no_year">YYYYeeeMMMMd</string>

2>:修改代码:



 protected void updateClock() {  
 。。。。
 final String dateFormat = "YYYY"+getContext().getString(R.string.system_ui_date_pattern);
 。。。。
 }



3:双行显示年月日星期几

注意view的android:layout_centerVertical="true"标识该view布局在父布局的垂直居中;

注意此情况下日期view不可设置为android:singleLine="true"。


 private final void updateClock() {
      final Context context = getContext();
         Date now = new Date();
         CharSequence dow = DateFormat.format("EEEE", now);
         String format=Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT);
         String date ="";
         if(format==null || "".equals(format.trim())){
          date = DateFormat.getDateFormat(context).format(now);
         }else{
          date = new SimpleDateFormat(format).format(now);
         }
         //end
         setText(context.getString(R.string.status_bar_date_formatter, dow, date));
        }


4:双行显示存在  android:layout_alignBaseline属性时:

相对布局中android:layout_alignBaseline="@id/clock"标识当前view基线是clock这个view,如下date的文字显示第一行以clock底部对其的,如下图:



<RelativeLayout
        android:id="@+id/datetime"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:paddingStart="2dp"
        android:paddingEnd="2dp"
        android:background="@drawable/ic_notify_button_bg"
        android:enabled="false"
        >
        <com.android.systemui.statusbar.policy.Clock
            android:id="@+id/clock"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="2dp"
            android:singleLine="true"
            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
            android:layout_centerVertical="true"
            />


        <com.android.systemui.statusbar.policy.DateView android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"           
            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
            android:layout_toEndOf="@id/clock"
            android:layout_centerVertical="true"
            android:layout_alignBaseline="@id/clock"           
            />
    </RelativeLayout>

5:其他随笔

TextView的android:textAllCaps ="true"----标识字母全大写


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值