您的位置:首页 > 产品设计 > UI/UE

如何在quicksettings中增加一个新的buttons

2015-10-26 10:40 363 查看
如何在quicksettings中增加一个新的buttons,下面主要是android L版本前(如KK)和android L版本
一,android L版本前(如KK):
下面就以在quicksettings中新增一个mms button为例。
1、新增layout文件

frameworks\base\packages\SystemUI\res\layout\quick_settings_tile_mms.xml



2、修改函数addSystemTiles (在此函数新增如下段code) frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QuickSettings.java

// mms

QuickSettingsTileView mMsTile = (QuickSettingsTileView)

inflater.inflate(R.layout.quick_settings_tile, parent, false);

mMsTile.setContent(R.layout.quick_settings_tile_mms, inflater);

mMsTile.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// mBar.collapseAllPanels(true);

// showBrightnessDialog();

Intent intent = new Intent();

intent.setComponent(new ComponentName(

"com.android.mms",

"com.android.mms.ui.ConversationList"));

startSettingsActivity(intent);

}

});

parent.addView(mMsTile);

mDynamicSpannedTiles.add(mMsTile);

3、新增后效果图



二,android L版本

可以参考mtk 源代码是如何添加mediatek自定义的QS Button:

alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\qs\tiles

下面我们以添加一个Camera QS Button开关为例:

如下图添加 Camera QS Button:



1,增加config文件内容

alps\frameworks\base\packages\SystemUI\res\values\config.xml

<!-- The default tiles to display in QuickSettings -->

<string name="quick_settings_tiles_default" translatable="false">

wifi,bt,inversion,cell,airplane,rotation,flashlight,location,cast,hotspot,hotknot,

audioprofile,dataconnection,camera

</string>

2,在下面目录下,新建CameraController.java和CameraControllerImpl.java文件

alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\statusbar\policy

2.1 CameraController.java:

package com.mediatek.systemui.statusbar.policy;

import java.util.Set;

public interface CameraController {

boolean isSupportCamera();

}

2.2 CameraControllerImpl.java:

package com.mediatek.systemui.statusbar.policy;

import android.content.Context;

import java.util.UUID;

public class CameraControllerImpl implements CameraController {

private static final String TAG = "CameraControllerImpl";

private final Context mContext;

public CameraControllerImpl(Context context) {

mContext = context;

}

@Override

public boolean isSupportCamera() {

return true;

}

}

3,在下面目录下,新建文件CameraTile.java

alps\frameworks\base\packages\SystemUI\src\com\mediatek\systemui\qs\tiles

CameraTile.java:

package com.mediatek.systemui.qs.tiles;

import android.content.Intent;

import android.content.Context;

import android.content.IntentFilter;

import android.content.BroadcastReceiver;

import android.net.ConnectivityManager;

import android.provider.Settings;

import android.telephony.SubscriptionManager;

import android.telephony.TelephonyManager;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnAttachStateChangeListener;

import com.android.internal.telephony.TelephonyIntents;

import com.android.systemui.R;

import com.android.systemui.qs.QSTile;

import com.android.internal.telephony.IccCardConstants;

import com.mediatek.xlog.Xlog;

import com.mediatek.systemui.statusbar.policy.CameraController;

public class CameraTile extends QSTile<QSTile.BooleanState> {

private static final String TAG = "CameraTile";

private static final boolean DEBUG = true;

private final CameraController mController=null;

private boolean mListening;

private int mDataState = R.drawable.ic_qs_inversion_off;

private IccCardConstants.State mSimState = IccCardConstants.State.UNKNOWN;

private TelephonyManager mTelephonyManager;

public CameraTile(Host host) {

super(host);

;//mController = host.getCameraController();

}

@Override

protected BooleanState newTileState() {

return new BooleanState();

}

@Override

public void setListening(boolean listening) {

}

boolean enabled =false;

@Override

protected void handleClick() {

enabled =!enabled;

if (enabled) {

mDataState = R.drawable.ic_qs_inversion_on;

} else {

mDataState = R.drawable.ic_qs_inversion_off;

}

refreshState();

}

@Override

protected void handleUpdateState(BooleanState state, Object arg) {

state.label ="Camera" ;//mContext.getString(R.string.camera);

state.visible = true;

state.iconId = mDataState;

}

}

4,在下面目录下的文件添加新的方法:

alps\frameworks\base\packages\SystemUI\src\com\android\systemui\qs\tiles\QSTile.java

public interface Host {

void startSettingsActivity(Intent intent);

.................

//add new method

CameraController getCameraController ();

5,添加内容

alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QSTileHost.java

5.1:

/// M: add CameraController qs

private final CameraController mCameraController ;

5.2:

public QSTileHost(Context context, PhoneStatusBar statusBar,

BluetoothController bluetooth, LocationController location,

RotationLockController rotation, NetworkController network,

ZenModeController zen, HotspotController hotspot,

CastController cast, FlashlightController flashlight,

UserSwitcherController userSwitcher, KeyguardMonitor keyguard,

SecurityController security,

/// M: add HotKnot in quicksetting

HotKnotController hotknot,

/// M: add AudioProfile in quicksetting

AudioProfileController audioprofile,

/// M: add DataConnection in quicksetting

DataConnectionController dataconnection

CameraController cameraController

) {

mContext = context;

mStatusBar = statusBar;

....

mCameraController =cameraController

}

5.3:

private QSTile<?> createTile(String tileSpec) {

if (tileSpec.equals("camera")) return new CameraTile(this);

else if (tileSpec.equals("wifi")) return new WifiTile(this);

else if (tileSpec.equals("bt")) return new BluetoothTile(this);

5.4:

@Override

public CameraController getCameraController() {

return mCameraController ;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: