android日期太长显示不全的问题

这次处理的bug是如下图所示日期太长显示完后,会把后面的设置图片等挤掉,如何解决这个问题呢?这里作者以跑马灯的方式解决的,出来的效果如下图所示。

 

这个模块是android手机最上方得状态栏显示的东西,包括信号、时间、日期等,具体如下图所示:

 

    而这些状态显示的地方位于\frameworks\base\packages\SystemUI模块。

在这次软件开发主要涉及的地方是:

       第一个是读取手机信号的函数:

src/com/android/systemui/statusbar/policy/NetworkController.java

当你在setting中设置接入网络的方式时,会发送一个广播给底层,然后底层中发现网络发生改变在发送广播给这个java文件的onbroadcast函数。

       第二个是修改时间和日期的:主要涉及的布局文件是

res/layout/status_bar_expanded_header.xml,而最终用这个布局文件的java文件是PhoneStatusBar.java文件。

<?xml version="1.0" encoding="utf-8"?>

<!--

** Copyright 2012, The Android Open Source Project

**

** Licensed under the Apache License, Version 2.0 (the "License");

** you may not use this file except in compliance with the License.

** You may obtain a copy of the License at

**

**     http://www.apache.org/licenses/LICENSE-2.0

**

** Unless required by applicable law or agreed to in writing, software

** distributed under the License is distributed on an "AS IS" BASIS,

** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

** See the License for the specific language governing permissions and

** limitations under the License.

-->

 

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"

    android:id="@+id/header"

    android:layout_width="match_parent"

    android:layout_height="@dimen/notification_panel_header_height"

    android:background="@drawable/notification_header_bg"

    android:orientation="horizontal"

    android:gravity="center_vertical"

    android:baselineAligned="false"

    >

    <RelativeLayout

        android:id="@+id/datetime"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:paddingLeft="2dp"

        android:paddingRight="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_marginRight="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="108dp"

            android:layout_height="wrap_content"

            android:singleLine="true"

            android:ellipsize="marquee"

            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"

            android:layout_toRightOf="@id/clock"

            android:layout_alignBaseline="@id/clock"

            />

    </RelativeLayout>

 

    <Space

        android:layout_width="0dp"

        android:layout_height="0dp"

        android:layout_weight="1"

        />

 

    <TextView

        android:id="@+id/header_debug_info"

        android:visibility="invisible"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center_vertical"

        android:fontFamily="sans-serif-condensed"

        android:textSize="11dp"

        android:textStyle="bold"

        android:textColor="#00A040"

        android:padding="2dp"

        />

 

    <!-- [SystemUI] Remove settings button to notification header. @{ -->

    <FrameLayout

        android:layout_width="46dp"

        android:layout_height="48dp" >

        <ImageView

            android:id="@+id/header_settings_button"

            android:layout_width="46dp"

            android:layout_height="48dp"

            android:scaleType="center"

            android:src="@drawable/ic_notify_settings"

            android:background="@drawable/ic_notify_button_bg"

            android:contentDescription="@string/accessibility_settings_button"

            android:visibility="gone"

        />

        <ImageView

            android:id="@+id/clear_all_button"

            android:layout_width="46dp"

            android:layout_height="50dp"

            android:scaleType="center"

            android:src="@drawable/ic_notify_clear"

            android:background="@drawable/ic_notify_button_bg"

            android:contentDescription="@string/accessibility_clear_all"

        />

    </FrameLayout>

    <!-- [SystemUI] Remove settings button to notification header. @} -->

 

    <FrameLayout android:id="@+id/settings_button_holder"

        android:layout_width="wrap_content"

        android:layout_height="50dp"

        android:layout_marginLeft="-1dp"

        android:layout_alignParentRight="true"

        >

        <ImageView android:id="@+id/settings_button"

            android:layout_width="wrap_content"

            android:layout_height="50dp"

            android:scaleType="center"

            android:src="@drawable/ic_notify_settings"

            android:background="@drawable/ic_notify_button_bg"

            android:contentDescription="@string/accessibility_desc_quick_settings"

            />

        <ImageView android:id="@+id/notification_button"

            android:layout_width="wrap_content"

            android:layout_height="50dp"

            android:scaleType="center"

            android:src="@drawable/ic_notifications"

            android:background="@drawable/ic_notify_button_bg"

            android:visibility="gone"

            android:contentDescription="@string/accessibility_notifications_button"

            />

    </FrameLayout>

</LinearLayout>

 

可以看到这个布局文件有两个时间和日期的自定义的类:

      <com.android.systemui.statusbar.policy.Clock

        <com.android.systemui.statusbar.policy.DateView

这两个类就是控制时间和日期的显示的,里面有相应的

final void updateClock() 函数用于修改时间和日期。

由于SystemUI模块的特殊性,依赖于某些东西,所以在修改完里面的东西后不能用adb install –r adb push方式看到修改效果,需要到烧机到机器里面才能看到效果。

讲解一点跑马灯的效果实现方式;

首先需要在相应的控件中设置特定宽度,以及跑马灯属性,如

            android:layout_width="108dp"

            android:ellipsize="marquee"

然后在自定义类中获得焦点,如:

    @Override 

    publicboolean isFocused() { 

    returntrue

这样就能让这个空间获得跑马灯的效果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值