知名网站制作公司,以下哪个不是网站开发工具,广州 建 网站,网站建设 盈利不要将Button的背景设置为selector 在布局文件和代码中#xff0c;都可以为Button设置background为selector#xff0c;这样方便实现按钮的正反选效果#xff0c;但实际跟踪发现#xff0c;如果是将Button的背景设置为selector#xff0c;在初始化Button的时候会将正反选图…不要将Button的背景设置为selector 在布局文件和代码中都可以为Button设置background为selector这样方便实现按钮的正反选效果但实际跟踪发现如果是将Button的背景设置为selector在初始化Button的时候会将正反选图片都加载在内存中具体可以查看Android源码在类Drawable.java的createFromXmlInner方法中对图片进行解析最终调用Drawable的inflate方法相当于一个按钮占用了两张相同大小图片所使用的内存如果一个界面上按钮很多或者是按钮很大光是按钮占用的内存就会很大可以通过在布局文件中给按钮只设置正常状态下的背景图片然后在代码中监听按钮的点击状态当按下按钮时为按钮设置反选效果的图片抬起时重新设置为正常状态下的背景。 如果你觉得为一个按钮提供正反选两张图片会导致APK的体积变大可以通过如下方式实现按钮点击的反选效果这种方式既不会存在Button占用两倍内存的情况又减小了APK的体积Android 5.0中的tintColor也可以实现类似的效果 ImageButton personalInfoBtn (ImageButton)findViewById(R.id.personalBtnId);personalInfoBtn.setOnTouchListener(new OnTouchListener() { SuppressLint(ClickableViewAccessibility) Override public boolean onTouch(View v, MotionEvent event) { int action event.getAction(); if(action MotionEvent.ACTION_DOWN){ ((ImageButton)v).setColorFilter(getResources().getColor(0X50000000)); }else if(action MotionEvent.ACTION_UP || action MotionEvent.ACTION_CANCEL){ ((ImageButton)v).clearColorFilter(); } // 为了不影响监听按钮的onClick回调返回值应为false return false; }}); 其它优化方式 1、尽量将Activity中的小图片和背景合并一张小图片既浪费布局的时间又平白地增加了内存占用 2、不要在Activity的主题中为Activity设置默认的背景图片这样会导致Activity占用的内存翻倍 !--千万不要在主题中为Activity设置默认背景 style nameActivity_Style parentandroid:Theme.Holo.Light.NoActionBar item nameandroid:backgrounddrawable/*/item /style 3、对于在需要时才显示的图片或者布局可以使用ViewStub标签通过sdk/tools目录下的hierarchyviewer.bat查看布局文件会发现使用viewstub标签的组件几乎不消耗布局的时间在代码中当需要显示时再去实例化有助于提高Activity的布局效率和节省Activity消耗的内存。 注意如果使用到WebView、视频播放、手写、动画等功能时关掉硬件加速会严重音效程序的运行效率这种情况可以只关闭掉Activity中某些view的硬件加速整个Activity的硬件加速不关闭。 如果Activity中某个View需要关闭硬件加速但整个Activity不能关闭可以调用view层级关闭硬件加速的方法 setLayerType(View.LAYER_TYPE_SOFTWARE, null); // view.setLayerType || 在定义view的构造方法中调用该方法 转载于:https://www.cnblogs.com/lucktian/p/7019326.html