189 8069 5689

Android系统音量条实例代码-创新互联

最近在定制Android系统音量条,发现代码还是蛮多的,下面总结一下。

创新互联公司凭借在网站建设、网站推广领域领先的技术能力和多年的行业经验,为客户提供超值的营销型网站建设服务,我们始终认为:好的营销型网站就是好的业务员。我们已成功为企业单位、个人等客户提供了成都网站设计、网站制作服务,以良好的商业信誉,完善的服务及深厚的技术力量处于同行领先地位。

代码是基于5.1.1版本的。


系统音量条的代码是在/frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java


布局文件是在/frameworks/base/packages/SystemUI/res/layout下。

先看看原生的音量条样式:

在代码中可以发现volume_dialog.xml这个文件,这个文件就是承载音量条的布局了,在layout文件夹找到打开会发现这个布局很简单,只是include了一个volume_panel

volume_panel布局包含了一个id叫slider_panel的FrameLayout和include了一个zen_mode_panel,显然slider_panel后面会包含seekbar,看VolumePanel.java也会发现在代码中加载了volume_panel_item.xml这个文件,一看,发现里面就包含了seekbar这个控件啦。另外zen_mode_panel是指勿扰模式。

在看这个布局文件的时候,你会看到android:clipChildren这个属性,它的作用:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩。默认为true。

若想某个控件不显示,设置属性android:visibility=”gone”就好了。

看完布局,下面就主要看VolumePanel.java这个文件了。

VolumePanel下定义了两个重要的子类型,分别是StreamResources和StreamControl。StreamResources实际上是一个枚举,它的每一个可用元素保存了一个流类型的通知框所需要的各种资源,如图标、提示文字等。StreamResources的定义就像下面这样:

  private enum StreamResources {
    BluetoothSCOStream(AudioManager.STREAM_BLUETOOTH_SCO,
        R.string.volume_icon_description_bluetooth,
        IC_AUDIO_BT,
        IC_AUDIO_BT_MUTE,
        false),
    // 这里省略了后面的几个枚举项的构造参数,这些与BluetoothSCOStream的内容是一致的
    RingerStream(...),
    VoiceStream(...),
    AlarmStream(...),
    MediaStream(...),
    NotificationStream(...),
    // for now, use media resources for master volume
    MasterStream(...),
    RemoteStream(...);// will be dynamically updated

    int streamType; // 流类型
    int descRes; // 描述信息
    int iconRes; // 图标
    int iconMuteRes; // 静音图标
    // RING, VOICE_CALL & BLUETOOTH_SCO are hidden unless explicitly requested
    boolean show; // 是否显示
    //构造函数
    StreamResources(int streamType, int descRes, int iconRes, int iconMuteRes, boolean show) {
      ...
    }
  }

当前文章:Android系统音量条实例代码-创新互联
当前链接:http://jkwzsj.com/article/gooog.html

其他资讯