一、在androidP上对volumeBar的修改主要是基于UI的修改,下面列出主要修改的方法和遇到的问题。
二、原生androidP Car volumeBar 的样式如下
这里我们需要改的地方主要分为两个部分,
1、左侧的图标
2、整个seekBar的样式修改。
1、关于左侧的图标的修改,我们可以替换资源。
在汽车设置界面中 , frameworks/base/packages/SystemUI/res/xml/car_volume_items.xml。
文件包含与每个已定义的 AudioAttributes.USAGE 相关联的界面元素(图标资源)。此文件通过使用与每个 VolumeGroup 中包含的首个识别出的用法相关联的资源,合理呈现已定义的 VolumeGroup。
如下面的 alarm的图片资源本来是 被我换成了, 之后的显示alarm的图标就变为了music。
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="unknown"
car:icon="@drawable/car_ic_music"/>
<item car:usage="media"
car:icon="@drawable/car_ic_music"/>
<item car:usage="voice_communication"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="alarm"
car:icon="@drawable/car_ic_music"/>
<item car:usage="notification"
car:icon="@drawable/car_ic_notification"/>
<item car:usage="notification_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:icon="@drawable/car_ic_notification"/>
<item car:usage="notification_communication_instant"
car:icon="@drawable/car_ic_notification"/>
<item car:usage="notification_communication_delayed"
car:icon="@drawable/car_ic_notification"/>
<item car:usage="notification_event"
car:icon="@drawable/car_ic_notification"/>
<item car:usage="assistance_accessibility"
car:icon="@drawable/car_ic_notification"/>
<item car:usage="assistance_navigation_guidance"
car:icon="@drawable/car_ic_navigation"/>
<item car:usage="assistance_sonification"
car:icon="@drawable/car_ic_notification"/>
<item car:usage="game"
car:icon="@drawable/car_ic_music"/>
<item car:usage="assistant"
car:icon="@drawable/car_ic_music"/>
</carVolumeItems>
2、整个seekBar的样式修改。
这个修改比较耗费时间,因为在androidP的原生代码中,CarVolumeDialogImpl.java中seekBar使用的framework/support/下面的控件SeekbarListItem, 这里的seekBar是来自 frameworks/support/car/res/layout/car_list_item_seekbar_content.xml中的Item. 这里就没有办法修改frameworks/support下面的xml文件了,然后使用了另一种方法。
2.1、在frameworks/base/packages/SystemUI/res/values/styles.xml 中新增代码
<style name="seek_bar_style">
<item name="android:progressDrawable">@drawable/car_seekbar_track_cc</item>
<item name="android:thumb">@drawable/car_seekbar_thumb_cc</item>
</style>
<style name="CarSeekbarStyles" parent="Theme.Car.NoActionBar">
<item name="android:seekBarStyle">@style/seek_bar_style</item>
</style>
2.2 在frameworks/base/packages/SystemUI/res/layout/car_volume_dialog.xml 中替换代码
android:theme="@style/CarSeekbarStyles" 替换原来的 android:theme="@style/Theme.Car.NoActionBar"
3 整个seekBar的样式修改。另一种方法就是替换控件SeekbarListItem 变成自定义的控件,然后在 mPagedListAdapter = new ListItemAdapter(mContext, new ListProvider(mVolumeLineItems),
BackgroundStyle.PANEL);的地方调用
mPagedListAdapter.registerListItemViewType(LIST_ITEM_TYPE_AIWAYS_SEEKBAR, .layout.aiways_car_list_item_seekbar_content, AiwaysSeekbarListItem::createViewHolder);
ps LIST_ITEM_TYPE_AIWAYS_SEEKBAR 为 4, aiways_car_list_item_seekbar_content.xml 为自定义控件重新加载的xml。