android 8.1 下拉栏Systemui的修改_「已注销」的博客-程序员ITS301

技术标签: 系统源码  

1.下拉开关的创建(哪些显示哪些不显示):
在vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java中进行开关的创建;不显示直接屏蔽就好 

  public QSTile createTile(String tileSpec) {
        /// M: Add extra tiles in quicksetting @{
        Context context = mHost.getContext();
        IQuickSettingsPlugin quickSettingsPlugin = OpSystemUICustomizationFactoryBase
                .getOpFactory(context).makeQuickSettings(context);
        /// @}
        if (tileSpec.equals("wifi")) return new WifiTile(mHost); //wifi
        else if (tileSpec.equals("bt")) return new BluetoothTile(mHost);//蓝牙
        else if (tileSpec.equals("cell")) return new CellularTile(mHost);//移动数据
        /**
         * 屏蔽状态栏功能  wanchengguo 20190527 begin
         * 
         */
       // else if (tileSpec.equals("dnd")) return new DndTile(mHost);
       // else if (tileSpec.equals("inversion")) return new ColorInversionTile(mHost);
        //else if (tileSpec.equals("airplane")) return new AirplaneModeTile(mHost);//飞行模式
        //else if (tileSpec.equals("work")) return new WorkModeTile(mHost);
        else if (tileSpec.equals("rotation")) return new RotationLockTile(mHost);//屏幕旋转 
        else if (tileSpec.equals("flashlight")) return new FlashlightTile(mHost);//手电筒
        else if (tileSpec.equals("location")) return new LocationTile(mHost);//位置信息
        //else if (tileSpec.equals("cast")) return new CastTile(mHost);
       // else if (tileSpec.equals("hotspot")) return new HotspotTile(mHost);
        //else if (tileSpec.equals("user")) return new UserTile(mHost);
        //else if (tileSpec.equals("battery")) return new BatterySaverTile(mHost);//省电模式 
       // else if (tileSpec.equals("saver")) return new DataSaverTile(mHost);
       // else if (tileSpec.equals("night")) return new NightDisplayTile(mHost);
       // else if (tileSpec.equals("nfc")) return new NfcTile(mHost);
        /// M: Customize the quick settings tiles for operator. @{
        /*else if (tileSpec.equals("dataconnection") && !SIMHelper.isWifiOnlyDevice())
            return new MobileDataTile(mHost);
       else if (tileSpec.equals("simdataconnection") && !SIMHelper.isWifiOnlyDevice() &&
                quickSettingsPlugin.customizeAddQSTile(new SimDataConnectionTile(mHost)) != null) {
            return (SimDataConnectionTile) quickSettingsPlugin.customizeAddQSTile(
                    new SimDataConnectionTile(mHost));
        } else if (tileSpec.equals("dulsimsettings") && !SIMHelper.isWifiOnlyDevice() &&
                quickSettingsPlugin.customizeAddQSTile(new DualSimSettingsTile(mHost)) != null) {
            return (DualSimSettingsTile) quickSettingsPlugin.customizeAddQSTile(
                    new DualSimSettingsTile(mHost));
        } */else if (tileSpec.equals("apnsettings") && !SIMHelper.isWifiOnlyDevice() &&
                quickSettingsPlugin.customizeAddQSTile(new ApnSettingsTile(mHost)) != null) {//设置
            return (ApnSettingsTile) quickSettingsPlugin.customizeAddQSTile(
                    new ApnSettingsTile(mHost));
        }
        //*/ freeme.gouzhouping, 20180120. FreemeAppTheme, add extra tiles.
        /*else if (tileSpec.equals("supershot")) {//超级截屏
            return new com.freeme.systemui.qs.tiles.FreemeSuperShot(mHost);
        }*/
        /**
         * 屏蔽状态栏功能  wanchengguo 20190527 end
         * 
         */
        else if (tileSpec.equals("audioprofile")) {//声音
            return new com.freeme.systemui.qs.tiles.FreemeAudioProfile(mHost);
        }
        //*/
        /// @}
        // Intent tiles.
        else if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(mHost, tileSpec);
        else if (tileSpec.startsWith(CustomTile.PREFIX)) return CustomTile.create(mHost, tileSpec);
        else {
            Log.w(TAG, "Bad tile spec: " + tileSpec);
            return null;
        }
    }

2.显示两行三列还是两行四列:

由SystemUI\src\com\android\systemui\qs\PagedTileLayout.java中决定:详见如下:

 public static class TilePage extends TileLayout {
        private int mMaxRows = 3;//定义下拉栏行数的地方 wanchengguo 20190618


        public TilePage(Context context, AttributeSet attrs) {
            super(context, attrs);
            updateResources();
        }

        @Override
        public boolean updateResources() {
            final int rows = getRows();
            boolean changed = rows != mMaxRows;
            if (changed) {
                mMaxRows = rows;
                requestLayout();
            }
            return super.updateResources() || changed;
        }

        private int getRows() {
            final Resources res = getContext().getResources();
            if (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
                return res.getInteger(R.integer.quick_settings_num_rows_portrait);
            }
            return Math.max(1, res.getInteger(R.integer.quick_settings_num_rows));
        }

        public void setMaxRows(int maxRows) {
            mMaxRows = maxRows;
        }

        public boolean isFull() {
            return mRecords.size() >= mColumns * mMaxRows;//mColumns决定列数,这个是在哪个地方来的
        }
    }

 根据代码可知mColumns是在TileLayout.java里定义的;具体方法如下:

public boolean updateResources() {
    final Resources res = mContext.getResources();
    final int columns = Math.max(1, res.getInteger(R.integer.quick_settings_num_columns));
    mCellHeight = mContext.getResources().getDimensionPixelSize(R.dimen.qs_tile_height);
    mCellMargin = res.getDimensionPixelSize(R.dimen.qs_tile_margin);
    mCellMarginTop = res.getDimensionPixelSize(R.dimen.qs_tile_margin_top);
    if (mColumns != columns) {
        mColumns = columns;
        requestLayout();
        return true;
    }
    return false;
}

所以列数只需要修改quick_settings_num_columns 即可

3.将亮度调节放在Viewpage的下面

修改SystemUI\src\com\android\systemui\qs\QSPanel.java 

 public QSPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;

        setOrientation(VERTICAL);
/**
 * 将亮度调节放在最末尾 20190618 begin wanchengguo
 */
       /* mBrightnessView = LayoutInflater.from(context).inflate(
                R.layout.quick_settings_brightness_dialog, this, false);
        addView(mBrightnessView);*/

        // M: @ {
        mQuickSettingsExt = OpSystemUICustomizationFactoryBase
                .getOpFactory(context).makeQuickSettings(context);
        if (mQuickSettingsExt != null) {
            mQuickSettingsExt.addOpViews(this);
        }
        // @ }

        setupTileLayout();

        mPageIndicator = LayoutInflater.from(context).inflate(
                R.layout.qs_page_indicator, this, false);
        addView(mPageIndicator);
        mBrightnessView = LayoutInflater.from(context).inflate(
                R.layout.quick_settings_brightness_dialog, this, false);
        addView(mBrightnessView);
        /**
         * 将亮度调节放在最末尾 20190618 end wanchengguo
         */
        if (mTileLayout instanceof PagedTileLayout) {
            ((PagedTileLayout) mTileLayout).setPageIndicator((PageIndicator) mPageIndicator);
        }

        addDivider();

        mFooter = new QSSecurityFooter(this, context);
        addView(mFooter.getView());

        updateResources();

        mBrightnessController = new BrightnessController(getContext(),
                findViewById(R.id.brightness_icon),
                findViewById(R.id.brightness_slider));
    }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qingcai_yuanzi/article/details/93077298

智能推荐

阿里云【达摩院特别版·趣味视觉AI训练营】笔记4_魔菲赫伯特的博客-程序员ITS301

阿里云【趣味视觉AI训练营】笔记4一、笔记说明二、正文三、转载说明一、笔记说明本博客专栏《阿里云【达摩院特别版·趣味视觉AI训练营】》的所有文章均为趣味视觉AI训练营的学习笔记,当前【达摩院特别版·趣味视觉AI训练营】的学习路线内容为:达摩院视觉AI介绍分割抠图功能讲解及演示文字识别项目讲解及使用说明图像识别项目讲解及使用说明实践课:人脸动漫化搭建二、正文三、转载说明本文内容完全原创,文章完成时间2021.3.25。若要转载本文,请在转载文章末尾附上本文链接:本文正文部分全

Win10+VS2013+CUDA8.0编译运行例程(.cu)出现error MSB4062:未能从程序集...问题的解决_Amusi(CVer)的博客-程序员ITS301

Win10+VS2013+CUDA8.0编译运行例程(.cu)出现error MSB4062:未能从程序集...问题的解决

双系统windows8 安装 遇到0x80070570_maomaodou22的博客-程序员ITS301

在xp上装双系统windows8时,如果遇到 0x80070570.先自动修复,不行就下个清理注册表工具,清理注册表。和你重装xp是一个效果。

中央处理器属于计算机外部设备吗,不属于计算机外部设备的是_weixin_39948309的博客-程序员ITS301

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。中央处理器和主存储器都不属于外部设备。外部设备指连在计算机主机以外的设备,它一般分为输入设备、输出设备和外存储器,外部设备是计算机系统中的重要组成部分,起到信息传输、转入和存储的作用。计算机俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海...

javascript闭包_有效地使用JavaScript闭包_cuyi7076的博客-程序员ITS301

在Node.js中,闭包以各种形式广泛使用,以支持Node的异步和事件驱动的编程模型。 通过对闭包有很好的了解,可以确保开发的应用程序的功能正确性,稳定性和可伸缩性。 闭包是将数据与作用于数据的代码相关联的一种自然方式,而继续传递是主要的语义样式。 使用闭包时,即使在逻辑上退出了封闭范围,在封闭范围内定义的数据元素也可被该范围内创建的函数访问。 在函数是一类变量的语言(例如JavaScri...

h3c交换机绑定ip+mac+端口以及取消绑定_狂暴的大力巴山的博客-程序员ITS301_交换机端口解绑

1.绑定时:sys int gi 1/0/10 进入借口 arp fil bind 192.168.1.101 xxxx-xxxx-xxx ip地址后边跟的是mac地址 qu qu save ...

随便推点

myeclipse中项目有红色感叹号的问题解决_大儿童的博客-程序员ITS301_myeclipse导入项目出现红色感叹号

1.右键出现红色叹号的项目,选择build path-->configure build path,会弹出如下窗口,选择Libraies,将里面出现红色错误标记的路径删除。2.删除带有错误的路径之后,在点击ADD External JARs选项,将项目里面的jar包路径重新加载进去,删除后的效果图如下所示。3.右击项目选择Add Library------>JRE System Library。4.不再报错。...

华为交换机ACL如何使用及原则_NoobMaster--CISSP的博客-程序员ITS301_华为acl配置命令

ACL(访问控制列表)的应用原则:   标准ACL,尽量用在靠近目的点   扩展ACL,尽量用在靠近源的地方(可以保护带宽和其他资源)   方向:在应用时,一定要注意方向ACL分类基本ACL #范围为2000~2999 可使用IPv4报文的源IP地址、分片标记和时间段信息来定义规则高级ACL ...

NRF51822 GPIO_rical730的博客-程序员ITS301

引脚的使用是最普遍也是最简单的,无非是配置,写(置位、置零、翻转),读,引脚中断。GPIO简介51822有31个引脚(可惜我的电路板引出来的只有很少的几个),分别是P0.0-P0.30,可以通过管脚配置寄存器PIN_CNF[n] register (n=0..30),对每个管脚进行单独的配置。配置的参数包括: - Direction 方向(输入、输出) - Drive stre

SpringBoot+Nacos+Gateway动态路由_蚕豆是个程序猿的博客-程序员ITS301_springboot gateway nacos

SpringBoot+Nacos+Gateway动态路由前言:动态路由: 可见标题 架构选择nacos作为服务注册,GateWay作为网关两者都是ali。那nacos咱们都知道可作为配置中心来使用且可动态,那做一个动态路由我觉得还是有些必要性的,不至于每次增加路由都要重新部署服务。之前写过一篇动态路由的文章,但那个可能使用的cloud,springboot版本低 以至于到现在的版本监听不到,而且那个是json版本。所以写下这篇文章。上一篇动态路由地址: 动态路由‘新版’动态路由(yaml格式)

matlab SVMtrain函数_我和神明画过押的博客-程序员ITS301_matlab svmtrain

matlab SVMtrain函数%svm train X_train_PCA = mapminmax(X_train_PCA, 0, 1);svm_model=svmtrain(y_train,X_train_PCA','-s 0 -t 0 -c 1');% svm testX_test_PCA = mapminmax(X_test_PCA, 0, 1);[predict_label, accuracy, dec_values] =svmpredict(y_test,X_test_PCA'

推荐文章

热门文章

相关标签