android-下拉通知栏日期显示

4.3

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

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

android-下拉通知栏日期显示_第1张图片


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文件中,对应是
只有月日星期

         eeeMMMMd
         
         @string/icu_abbrev_wday_month_day_no_year
*/
/*
         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文件YYYYeeeMMMMd

2>:修改代码:



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

android-下拉通知栏日期显示_第2张图片


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

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

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

android-下拉通知栏日期显示_第3张图片

 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底部对其的,如下图:

android-下拉通知栏日期显示_第4张图片


        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"
        >
                    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"
            />


                    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"           
            />
   

5:其他随笔

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


你可能感兴趣的:(android-下拉通知栏日期显示)