如何在下拉状态栏上新增一个开关按钮?
以添加情景模式切换按钮为例,
1、资源准备:至少需要添加的图片和字符串资源有
不同的情景模式对应的资源图片放在SystemUI的图片资源目录下:/SystemUI/res/drawable-hdpi/
字符串资源表示按钮的标题放在SystemUI的strings.xml文件中:/SystemUI/res/values/strings.xml
2、框架搭建:添加情景模式切换按钮
首先,定位至SystemUI/res/values/config.xml,在该配置文件添加默认快捷按钮选项,假设命名为audioprofile,即
<string name="quick_settings_tiles_default" translatable="false">
wifi,bt,data,......,audioprofile
</string>
其次,在SystemUI/src/com/android/systemui/qs/tiles下新增文件:AudioProfileTile.java,并在SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java文件中做创建按钮的工作:
(1)导入:
import com.android.systemui.qs.tiles.AudioProfileTile;
(2)创建audioprofile按钮
private QSTile<?> createTile(String tileSpec) {
if (tileSpec.equals("wifi") && !WCN_DISABLED) return new WifiTile(this);
else if (tileSpec.equals("bt") && !WCN_DISABLED) return new BluetoothTile(this);
......
else if (tileSpec.equals("audioprofile")) return new AudioProfileTile(this); //新增
else if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(this,tileSpec);
else throw new IllegalArgumentException("Bad tile spec: " + tileSpec);
}
3、功能实现:编写AudioProfileTile.java代码文件
AudioProfileTile.java:情景模式实现的功能代码,情景模式切换功能主要在这个文件中实现,需要复写的主要方法包括:
public class AudioProfileTile extends QSTile<QSTile.BooleanState> {
public AudioProfileTile(Host host) { //初始化工作
super(host);
......;
}
@Override
protected BooleanState newTileState() {
return new BooleanState();
}
@Override
protected void handleClick() { //点击事件
}
@Override
protected void handleLongClick() { //长按点击
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) { //状态更新
}
}
注:第1步中准备的图片和字符串资源会在AudioProfileTile.java文件中用到。
经过以上三步,就可以在下拉状态栏上添加一个新的功能按钮。