case1:如何调整状态栏中通知栏里图标的间隔
在frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件中,修改以下值就可以默认打开或关闭锁屏的提示音:
<integer name="def_lockscreen_sounds_enabled">1</integer>
1为开启,0为关闭
case3:如何调整状态栏收缩展开速度?
调整状态栏收缩展开速度:
请在\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PanelView.java
添加:
public static final float FLING_MIN_VELOCITY = 2000;//设定fling最小速度
在函数animationTick中增加以下粗体代码:
private void animationTick(long dtms) {
if (!mTimeAnimator.isStarted()) {
......
if (mRubberbanding) {
mClosing = true;
} else if (mVel == 0) {
// if the panel is less than halfway open, close it
mClosing = (mFinalTouchY / getFullHeight()) < 0.5f;
} else {
mClosing = mExpandedHeight > 0 && mVel < 0;
}
//add
if(mVel > 0 && mVel <
FLING_MIN_VELOCITY){
mVel = FLING_MIN_VELOCITY;
}else if(mVel < 0 && mVel > -FLING_MIN_VELOCITY){
mVel = -FLING_MIN_VELOCITY;
}
} else if (dtms > 0) {
......
}
其中:FLING_MIN_VELOCITY这个值代表最小的速度,可以根据实际情况及需求进行调整,值越大,速度越快。
case4:如何让一个activity 浮在锁屏界面的上方,按返回后再进入解锁界面可以给当前activity加上FLAG_SHOW_WHEN_LOCKED的属性,如下:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
加上这个属性后,该activity就可以 浮在锁屏界面的上方,需要按返回后再进入解锁界面。
case5:如何去掉开机动画结束后的上锁声音?在应用程序中,如何默认全屏,隐藏状态栏和标题栏。
修改如下:
在Activity的onCreate()方法中加入:
requestWindowFeature(Window.FEATURE_NO_TITLE);//设置界面无标题
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
或者在AndroidManifest.xml中添加样式
隐藏标题栏需要使用预定义样式:android:theme=”@android:style/Theme.NoTitleBar”.
隐藏状态栏:android:theme=”@android:style/Theme.NoTitleBar.Fullscreen”.
修改power键消息的传递,参见:
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
......
case KeyEvent.KEYCODE_POWER: {
if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) {
- result = (result & ~ACTION_WAKE_UP) | ACTION_GO_TO_SLEEP;
}
}
}
将上面那句注释掉就可以了,不会影响到power键的关机等功能。
case8:如何在activity中禁止状态栏下拉?禁止下拉栏下拉,可以参考如下方法,
在相关activity的onCreate,onResume,onStop接口中添加相应逻辑即可。具体如下:
import android.app.StatusBarManager;
import android.content.Context;
private StatusBarManager sStatusBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (sStatusBar == null) {
sStatusBar = (StatusBarManager)getSystemService(Context.STATUS_BAR_SERVICE);
}
}
@Override
public void onResume() {
super.onResume();
if (sStatusBar != null) {
sStatusBar.disable(StatusBarManager.DISABLE_EXPAND);
}
}
@Override
public void onStop() {
super.onStop();
if (sStatusBar != null) {
sStatusBar.disable(StatusBarManager.DISABLE_NONE);
}
}
定位到frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\QuickSettingsModel.java中,按照如下红色代码修改即可:
第一步:设置可在各个情景模式之间切换,在addVolumeTile的onClick方法中添加下面红色代码:
if (AudioManager.RINGER_MODE_SILENT == ringerMode) {
...
} else if (AudioManager.RINGER_MODE_VIBRATE == ringerMode) {
Settings.System.putInt(mResolver,
Settings.System.SOUND_EFFECTS_ENABLED, 1);
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_OUTDOOR);
} else if (AudioManager.RINGER_MODE_OUTDOOR == ringerMode) {
Settings.System.putInt(mResolver,
Settings.System.SOUND_EFFECTS_ENABLED, 1);
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
} else {
...
}
第二步:设置切换到户外模式时,需要显示的图片。由于平台版本默认无此功能,因此需要自行添加一张图片到systemui的资源中。然后按照下面方式修改,在onVolumeStateChanged方法中添加下面红色代码:
if (AudioManager.RINGER_MODE_VIBRATE == ringerMode) {
mVolumeTileState.iconId = R.drawable.ic_qs_vibrate_on_sprd;
} else if (AudioManager.RINGER_MODE_SILENT == ringerMode) {
mVolumeTileState.iconId = R.drawable.ic_qs_silent_on_sprd;
} else if (AudioManager.RINGER_MODE_OUTDOOR == ringerMode) {
mVolumeTileState.iconId = R.drawable.ic_qs_gps_on_sprd; //这里为新增的图片
} else {
mVolumeTileState.iconId = R.drawable.ic_qs_general_on_sprd;
}
<dimen name="widget_big_font_size">48dp</dimen>
原因:
锁屏界面的显示时间对应的view是文件frameworks/base/packages/Keyguard/res/layout/keyguard_status_view.xml中的
<TextClock
android:id="@+id/clock_view"
...
style="@style/widget_big_thin"
.../>
而widget_big_thin的定义在文件frameworks/base/packages/Keyguard/res/values/styles.xml中为
<style name="widget_big_thin" parent="big_thin">
<item name="android:textSize">@dimen/widget_big_font_size</item>
</style>
而widget_big_font_size的定义在文件frameworks/base/packages/Keyguard/res/values/dimens.xml中。
需要修改两个文件即可:
1.定位到\frameworks\base\packages\Keyguard\src\com\android\keyguard\KeyguardStatusView.java的refresh函数:
修改前:
final String dateFormat = DateFormat.getBestDateTimePattern(locale,
res.getString(R.string.abbrev_wday_month_day_no_year));
修改后:
final String dateFormat = "KeyguardDateSameForSetting";
2.定位到\frameworks\base\core\java\android\widget\TextClock.java的onTimeChanged函数:
修改前:
setText(DateFormat.format(mFormat, mTime));
修改后:
if (mFormat.equals("KeyguardDateSameForSetting")) {
setText(DateFormat.getDateFormat(getContext()).format(mTime.getTime()));
} else {
setText(DateFormat.format(mFormat, mTime));
}
版本中是默认不支持状态栏显示户外模式图标的,如果需要显示,需要在systemui模块新增相关图标和字符串。
定位到frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBarPolicy.java的updateVolume方法中,增加如下红色代码即可
final boolean visible = ringerMode == AudioManager.RINGER_MODE_SILENT ||
ringerMode == AudioManager.RINGER_MODE_OUTDOOR ||
ringerMode == AudioManager.RINGER_MODE_VIBRATE;
if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) {
...
} else if (ringerMode == AudioManager.RINGER_MODE_OUTDOOR) {
iconId = R.drawable.stat_sys_outdoor; //新增图片id
contentDescription = mContext.getString(R.string.stat_sys_outdoor); //新增字符串id
} else {
...
}
修改如下震动时长即可,0是不震动,数值越大震动感越强
- prvandroid:vibrationDuration="20"原文地址:http://blog.csdn.net/tfslovexizi/article/details/43306939