Android 7.0(N) Settings 修改Icon 与侧拉栏不同步问题


Android N Settings模块与Android M Settings模块差异参考链接 :http://blog.csdn.net/niexu19900104/article/details/53026132#reply

侧拉栏数据适配器

\frameworks\base\packages\SettingsLib\src\com\android\settingslib\drawerSettingsDrawerAdapter.java


 void updateCategories() {
        List<DashboardCategory> categories = mActivity.getDashboardCategories();
        mItems.clear();
        // Spacer.
        mItems.add(null);
        Item tile = new Item();
        tile.label = mActivity.getString(R.string.home);
        tile.icon = Icon.createWithResource(mActivity, R.drawable.home);
        mItems.add(tile);
        for (int i = 0; i < categories.size(); i++) {
            Item category = new Item();
            category.icon = null;
            DashboardCategory dashboardCategory = categories.get(i);
            category.label = dashboardCategory.title;
            mItems.add(category);
            for (int j = 0; j < dashboardCategory.tiles.size(); j++) {
                tile = new Item();
                Tile dashboardTile = dashboardCategory.tiles.get(j);
                tile.label = dashboardTile.title;
               // 默认是dashboardTile.icon; 自己可以替换图片可以控制和Settings主页不同的icon
                tile.icon =Icon.createWithResource(mActivity,R.drawable.bluetooth);
                tile.tile = dashboardTile;
                mItems.add(tile);
            }
        }
        notifyDataSetChanged();
    }





getCategories()方法差不多可分为三步:

1.先调用getTilesForAction() ->getTilesForInten()从AndroidMainifast.xml中声明的activity信息中解析,并将解析的数据以Tile类型数据结构封装。

2,遍历存储所有Tile的集合,将通过tile.category属性,将其分类,并构建成category,并将category存储在对应的categoryMap中。

3.构建categories,并且排序,排序是按照DashboardCategory的priority排序的。

先看一下Title数据类型,它里面封装的每一个变量都是和 AndroidMainifast.xml中声明Activity时<meta-data/>标签一一对应的。

Title : 对应每个item显示的标题
icon :对应每个Item显示的图标
summary : 对应每个item显示的详细信息,summary
intent :item 对应的intent
cetagory :item 属于哪一个catagory
priority : item 的位置有关,排序会用到
extras :Optional additional data for use by subclasses of the activity,从启动它的类携带过来的信息
meta-data :The metaData from the activity that defines this tile,定义的meta-data


通过这样的方法获取到了Settings主菜单和左后滑动抽屉效果需要显示的数据,然后将数据抛给SettingsDrawerAdapter,在它的getView方法中去创建对应的view,就将界面展示出来了。
Android N设置中没有主界面显示的布局文件,而是直接解析AndroidManifast.xml文件,从该文件中获得并处理要显示的信息。


最终其实只要修改drawer_item.xml下面的一个属性即可,图层属性渲染覆盖了我们资源图
\frameworks\base\packages\SettingsLib\res\layout\drawer_item.xml

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tile_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:orientation="horizontal" >

<ImageView
android:id="@android:id/icon"
android:layout_width="72dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:tint="?android:attr/colorAccent" //移除掉这里的颜色渲染属性 否则图形出不来
android:paddingStart="16dp"
android:paddingEnd="32dp" />

<TextView
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="?android:attr/colorControlNormal"
android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值