原文地址:http://blog.csdn.net/baiyuliang2013/article/details/46674735

适用版本

谷歌是在4.4版本以后允许开发者自定义通知栏/状态栏背景颜色,4.4以前是不支持这个功能

方法1


设置主题 不过由于市场上的SDK版本很多所有不建议用这种方法

Theme.Holo.Light.NoActionBar.TranslucentDecor
Theme.Holo.NoActionBar.TranslucentDecor

<style name="AppTheme" parent="AppBaseTheme">  <!-- Status Bar -->  <item name="android:windowTranslucentStatus">true</item>  <!-- Navigation Bar -->  <item name="android:windowTranslucentNavigation">true</item>  </style>

方法2在代码中控制

在BaseActivity的OnCreate方法

@Override
protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {    setTranslucentStatus(true);    SystemBarTintManager tintManager = new SystemBarTintManager(this);    tintManager.setStatusBarTintEnabled(true);    tintManager.setStatusBarTintResource(R.color.top_bg_color);//通知栏所需颜色  }    setContentView(R.layout.main_activity);
}  @TargetApi(19)     private void setTranslucentStatus(boolean on) {    Window win = getWindow();    WindowManager.LayoutParams winParams = win.getAttributes();    final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;    if (on) {    winParams.flags |= bits;    } else {    winParams.flags &= ~bits;    }    win.setAttributes(winParams);    } 

需注意的是, tintManager.setStatusBarTintResource(R.color.top_bg_color);这一步的颜色值(即把你的状态栏颜色与你的标题栏颜色保持一致)要写在color.xml中去,如果用Color.praseColor则会报错。

但是运行发现,好像标题栏被提上去了,就是说APP界面全屏了,状态了盖在了APP上,恩,这并非我们想要的效果,那如何将界面从状态栏下部开始呢,只需要在Activity的布局文件最外层控件加上一个属性:android:fitsSystemWindows=”true”就可以啦!


PS:在使用过程中发现了一些问题,使用以上方法对单个Activity有效,但是对继承了TabActivity的导航页怎么办呢?假如MainActivity继承了TabActivity,Tab1Activity、Tab2Activity、Tab3Activity是三个子项,那么设置状态栏的代码需写在MainActivity中,而 android:fitsSystemWindows=”true”需写在三个子Activity的xml布局文件中,这样设置后仍然有问题,就是进入应用后首页也就是Tab1Activity没有问题,而Tab2Activity、Tab3Activity却没达到效果,它们的效果相当于未加android:fitsSystemWindows=”true”时的效果,期初我怀疑是Activity不同的原因,因此我把Tab1Activity和Tab3Activity调了下位置,结果Tab3Activity成为首页后正常,而Tab1Activity又不正常了,百思不得姐,最后实在没办法,就在Tab2Activity、Tab3Activity的OnCreate方法中加了几句代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  ((LinearLayout)findViewById(R.id.ll)).setPadding(0, SysUtils.getStatusHeight(this), 0,0);  }

状态栏高度算法

/**  * 状态栏高度算法  * @param activity  * @return  */  public static int getStatusHeight(Activity activity){    int statusHeight = 0;    Rect localRect = new Rect();    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect);    statusHeight = localRect.top;    if (0 == statusHeight){    Class<?> localClass;    try {    localClass = Class.forName("com.android.internal.R$dimen");    Object localObject = localClass.newInstance();    int i5 = Integer.parseInt(localClass.getField("status_bar_height").get(localObject).toString());    statusHeight = activity.getResources().getDimensionPixelSize(i5);    } catch (ClassNotFoundException e) {    e.printStackTrace();    } catch (IllegalAccessException e) {    e.printStackTrace();    } catch (InstantiationException e) {    e.printStackTrace();    } catch (NumberFormatException e) {    e.printStackTrace();    } catch (IllegalArgumentException e) {    e.printStackTrace();    } catch (SecurityException e) {    e.printStackTrace();    } catch (NoSuchFieldException e) {    e.printStackTrace();    }    }    return statusHeight;    }   

SystemBarTintManager.java源码:

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout.LayoutParams;  import java.lang.reflect.Method;  /**  * Class to manage status and navigation bar tint effects when using KitKat   * translucent system UI modes.  *  */
@SuppressWarnings({ "rawtypes", "unchecked" })
public class SystemBarTintManager {  static {  // Android allows a system property to override the presence of the navigation bar.  // Used by the emulator.  // See https://github.com/android/platform_frameworks_base/blob/master/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#L1076  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  try {  Class c = Class.forName("android.os.SystemProperties");  Method m = c.getDeclaredMethod("get", String.class);  m.setAccessible(true);  sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys");  } catch (Throwable e) {  sNavBarOverride = null;  }  }  }  /**  * The default system bar tint color value.  */  public static final int DEFAULT_TINT_COLOR = 0x99000000;  private static String sNavBarOverride;  private final SystemBarConfig mConfig;  private boolean mStatusBarAvailable;  private boolean mNavBarAvailable;  private boolean mStatusBarTintEnabled;  private boolean mNavBarTintEnabled;  private View mStatusBarTintView;  private View mNavBarTintView;  /**  * Constructor. Call this in the host activity onCreate method after its  * content view has been set. You should always create new instances when  * the host activity is recreated.  *  * @param activity The host activity.  */  @TargetApi(19)  public SystemBarTintManager(Activity activity) {  Window win = activity.getWindow();  ViewGroup decorViewGroup = (ViewGroup) win.getDecorView();  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  // check theme attrs  int[] attrs = {android.R.attr.windowTranslucentStatus,  android.R.attr.windowTranslucentNavigation};  TypedArray a = activity.obtainStyledAttributes(attrs);  try {  mStatusBarAvailable = a.getBoolean(0, false);  mNavBarAvailable = a.getBoolean(1, false);  } finally {  a.recycle();  }  // check window flags  WindowManager.LayoutParams winParams = win.getAttributes();  int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;  if ((winParams.flags & bits) != 0) {  mStatusBarAvailable = true;  }  bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;  if ((winParams.flags & bits) != 0) {  mNavBarAvailable = true;  }  }  mConfig = new SystemBarConfig(activity, mStatusBarAvailable, mNavBarAvailable);  // device might not have virtual navigation keys  if (!mConfig.hasNavigtionBar()) {  mNavBarAvailable = false;  }  if (mStatusBarAvailable) {  setupStatusBarView(activity, decorViewGroup);  }  if (mNavBarAvailable) {  setupNavBarView(activity, decorViewGroup);  }  }  /**  * Enable tinting of the system status bar.  *  * If the platform is running Jelly Bean or earlier, or translucent system  * UI modes have not been enabled in either the theme or via window flags,  * then this method does nothing.  *  * @param enabled True to enable tinting, false to disable it (default).  */  public void setStatusBarTintEnabled(boolean enabled) {  mStatusBarTintEnabled = enabled;  if (mStatusBarAvailable) {  mStatusBarTintView.setVisibility(enabled ? View.VISIBLE : View.GONE);  }  }  /**  * Enable tinting of the system navigation bar.  *  * If the platform does not have soft navigation keys, is running Jelly Bean  * or earlier, or translucent system UI modes have not been enabled in either  * the theme or via window flags, then this method does nothing.  *  * @param enabled True to enable tinting, false to disable it (default).  */  public void setNavigationBarTintEnabled(boolean enabled) {  mNavBarTintEnabled = enabled;  if (mNavBarAvailable) {  mNavBarTintView.setVisibility(enabled ? View.VISIBLE : View.GONE);  }  }  /**  * Apply the specified color tint to all system UI bars.  *  * @param color The color of the background tint.  */  public void setTintColor(int color) {  setStatusBarTintColor(color);  setNavigationBarTintColor(color);  }  /**  * Apply the specified drawable or color resource to all system UI bars.  *  * @param res The identifier of the resource.  */  public void setTintResource(int res) {  setStatusBarTintResource(res);  setNavigationBarTintResource(res);  }  /**  * Apply the specified drawable to all system UI bars.  *  * @param drawable The drawable to use as the background, or null to remove it.  */  public void setTintDrawable(Drawable drawable) {  setStatusBarTintDrawable(drawable);  setNavigationBarTintDrawable(drawable);  }  /**  * Apply the specified alpha to all system UI bars.  *  * @param alpha The alpha to use  */  public void setTintAlpha(float alpha) {  setStatusBarAlpha(alpha);  setNavigationBarAlpha(alpha);  }  /**  * Apply the specified color tint to the system status bar.  *  * @param color The color of the background tint.  */  public void setStatusBarTintColor(int color) {  if (mStatusBarAvailable) {  mStatusBarTintView.setBackgroundColor(color);  }  }  /**  * Apply the specified drawable or color resource to the system status bar.  *  * @param res The identifier of the resource.  */  public void setStatusBarTintResource(int res) {  if (mStatusBarAvailable) {  mStatusBarTintView.setBackgroundResource(res);  }  }  /**  * Apply the specified drawable to the system status bar.  *  * @param drawable The drawable to use as the background, or null to remove it.  */  @SuppressWarnings("deprecation")  public void setStatusBarTintDrawable(Drawable drawable) {  if (mStatusBarAvailable) {  mStatusBarTintView.setBackgroundDrawable(drawable);  }  }  /**  * Apply the specified alpha to the system status bar.  *  * @param alpha The alpha to use  */  @TargetApi(11)  public void setStatusBarAlpha(float alpha) {  if (mStatusBarAvailable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {  mStatusBarTintView.setAlpha(alpha);  }  }  /**  * Apply the specified color tint to the system navigation bar.  *  * @param color The color of the background tint.  */  public void setNavigationBarTintColor(int color) {  if (mNavBarAvailable) {  mNavBarTintView.setBackgroundColor(color);  }  }  /**  * Apply the specified drawable or color resource to the system navigation bar.  *  * @param res The identifier of the resource.  */  public void setNavigationBarTintResource(int res) {  if (mNavBarAvailable) {  mNavBarTintView.setBackgroundResource(res);  }  }  /**  * Apply the specified drawable to the system navigation bar.  *  * @param drawable The drawable to use as the background, or null to remove it.  */  @SuppressWarnings("deprecation")  public void setNavigationBarTintDrawable(Drawable drawable) {  if (mNavBarAvailable) {  mNavBarTintView.setBackgroundDrawable(drawable);  }  }  /**  * Apply the specified alpha to the system navigation bar.  *  * @param alpha The alpha to use  */  @TargetApi(11)  public void setNavigationBarAlpha(float alpha) {  if (mNavBarAvailable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {  mNavBarTintView.setAlpha(alpha);  }  }  /**  * Get the system bar configuration.  *  * @return The system bar configuration for the current device configuration.  */  public SystemBarConfig getConfig() {  return mConfig;  }  /**  * Is tinting enabled for the system status bar?  *  * @return True if enabled, False otherwise.  */  public boolean isStatusBarTintEnabled() {  return mStatusBarTintEnabled;  }  /**  * Is tinting enabled for the system navigation bar?  *  * @return True if enabled, False otherwise.  */  public boolean isNavBarTintEnabled() {  return mNavBarTintEnabled;  }  private void setupStatusBarView(Context context, ViewGroup decorViewGroup) {  mStatusBarTintView = new View(context);  LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getStatusBarHeight());  params.gravity = Gravity.TOP;  if (mNavBarAvailable && !mConfig.isNavigationAtBottom()) {  params.rightMargin = mConfig.getNavigationBarWidth();  }  mStatusBarTintView.setLayoutParams(params);  mStatusBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR);  mStatusBarTintView.setVisibility(View.GONE);  decorViewGroup.addView(mStatusBarTintView);  }  private void setupNavBarView(Context context, ViewGroup decorViewGroup) {  mNavBarTintView = new View(context);  LayoutParams params;  if (mConfig.isNavigationAtBottom()) {  params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getNavigationBarHeight());  params.gravity = Gravity.BOTTOM;  } else {  params = new LayoutParams(mConfig.getNavigationBarWidth(), LayoutParams.MATCH_PARENT);  params.gravity = Gravity.RIGHT;  }  mNavBarTintView.setLayoutParams(params);  mNavBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR);  mNavBarTintView.setVisibility(View.GONE);  decorViewGroup.addView(mNavBarTintView);  }  /**  * Class which describes system bar sizing and other characteristics for the current  * device configuration.  *  */  public static class SystemBarConfig {  private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height";  private static final String NAV_BAR_HEIGHT_RES_NAME = "navigation_bar_height";  private static final String NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME = "navigation_bar_height_landscape";  private static final String NAV_BAR_WIDTH_RES_NAME = "navigation_bar_width";  private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar";  private final boolean mTranslucentStatusBar;  private final boolean mTranslucentNavBar;  private final int mStatusBarHeight;  private final int mActionBarHeight;  private final boolean mHasNavigationBar;  private final int mNavigationBarHeight;  private final int mNavigationBarWidth;  private final boolean mInPortrait;  private final float mSmallestWidthDp;  private SystemBarConfig(Activity activity, boolean translucentStatusBar, boolean traslucentNavBar) {  Resources res = activity.getResources();  mInPortrait = (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT);  mSmallestWidthDp = getSmallestWidthDp(activity);  mStatusBarHeight = getInternalDimensionSize(res, STATUS_BAR_HEIGHT_RES_NAME);  mActionBarHeight = getActionBarHeight(activity);  mNavigationBarHeight = getNavigationBarHeight(activity);  mNavigationBarWidth = getNavigationBarWidth(activity);  mHasNavigationBar = (mNavigationBarHeight > 0);  mTranslucentStatusBar = translucentStatusBar;  mTranslucentNavBar = traslucentNavBar;  }  @TargetApi(14)  private int getActionBarHeight(Context context) {  int result = 0;  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {  TypedValue tv = new TypedValue();  context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);  result = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());  }  return result;  }  @TargetApi(14)  private int getNavigationBarHeight(Context context) {  Resources res = context.getResources();  int result = 0;  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {  if (hasNavBar(context)) {  String key;  if (mInPortrait) {  key = NAV_BAR_HEIGHT_RES_NAME;  } else {  key = NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME;  }  return getInternalDimensionSize(res, key);  }  }  return result;  }  @TargetApi(14)  private int getNavigationBarWidth(Context context) {  Resources res = context.getResources();  int result = 0;  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {  if (hasNavBar(context)) {  return getInternalDimensionSize(res, NAV_BAR_WIDTH_RES_NAME);  }  }  return result;  }  @TargetApi(14)  private boolean hasNavBar(Context context) {  Resources res = context.getResources();  int resourceId = res.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", "android");  if (resourceId != 0) {  boolean hasNav = res.getBoolean(resourceId);  // check override flag (see static block)  if ("1".equals(sNavBarOverride)) {  hasNav = false;  } else if ("0".equals(sNavBarOverride)) {  hasNav = true;  }  return hasNav;  } else { // fallback  return !ViewConfiguration.get(context).hasPermanentMenuKey();  }  }  private int getInternalDimensionSize(Resources res, String key) {  int result = 0;  int resourceId = res.getIdentifier(key, "dimen", "android");  if (resourceId > 0) {  result = res.getDimensionPixelSize(resourceId);  }  return result;  }  @SuppressLint("NewApi")  private float getSmallestWidthDp(Activity activity) {  DisplayMetrics metrics = new DisplayMetrics();  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {  activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);  } else {  // TODO this is not correct, but we don't really care pre-kitkat  activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);  }  float widthDp = metrics.widthPixels / metrics.density;  float heightDp = metrics.heightPixels / metrics.density;  return Math.min(widthDp, heightDp);  }  /**  * Should a navigation bar appear at the bottom of the screen in the current  * device configuration? A navigation bar may appear on the right side of  * the screen in certain configurations.  *  * @return True if navigation should appear at the bottom of the screen, False otherwise.  */  public boolean isNavigationAtBottom() {  return (mSmallestWidthDp >= 600 || mInPortrait);  }  /**  * Get the height of the system status bar.  *  * @return The height of the status bar (in pixels).  */  public int getStatusBarHeight() {  return mStatusBarHeight;  }  /**  * Get the height of the action bar.  *  * @return The height of the action bar (in pixels).  */  public int getActionBarHeight() {  return mActionBarHeight;  }  /**  * Does this device have a system navigation bar?  *  * @return True if this device uses soft key navigation, False otherwise.  */  public boolean hasNavigtionBar() {  return mHasNavigationBar;  }  /**  * Get the height of the system navigation bar.  *  * @return The height of the navigation bar (in pixels). If the device does not have  * soft navigation keys, this will always return 0.  */  public int getNavigationBarHeight() {  return mNavigationBarHeight;  }  /**  * Get the width of the system navigation bar when it is placed vertically on the screen.  *  * @return The nbsp;width of the navigation bar (in pixels). If the device does not have  * soft navigation keys, this will always return 0.  */  public int getNavigationBarWidth() {  return mNavigationBarWidth;  }  /**  * Get the layout inset for any system UI that appears at the top of the screen.  *  * @param withActionBar True to include the height of the action bar, False otherwise.  * @return The layout inset (in pixels).  */  public int getPixelInsetTop(boolean withActionBar) {  return (mTranslucentStatusBar ? mStatusBarHeight : 0) + (withActionBar ? mActionBarHeight : 0);  }  /**  * Get the layout inset for any system UI that appears at the bottom of the screen.  *  * @return The layout inset (in pixels).  */  public int getPixelInsetBottom() {  if (mTranslucentNavBar && isNavigationAtBottom()) {  return mNavigationBarHeight;  } else {  return 0;  }  }  /**  * Get the layout inset for any system UI that appears at the right of the screen.  *  * @return The layout inset (in pixels).  */  public int getPixelInsetRight() {  if (mTranslucentNavBar && !isNavigationAtBottom()) {  return mNavigationBarWidth;  } else {  return 0;  }  }  }  } 

Android自定义通知栏/状态栏颜色相关推荐

  1. android自定义主题背景颜色,Android 自定义SeekBar 实现分段显示不同背景颜色的示例代码...

    在最近的开发工作中,要实现一个调色板的进度条,SeekBar要分成10段显示不同颜色,功夫不负有心人,终于实现了这个功能,下面分享给大家 示例图: 1.自定义SeekBar import androi ...

  2. android自定义通知栏图标大小,Android不使用自定义布局情况下实现自定义通知栏图标的方法...

    本文实例讲述了Android不使用自定义布局情况下实现自定义通知栏图标的方法.分享给大家供大家参考,具体如下: 自定义通知栏图标?不是很简单么.自定义布局都不在话下! 是的,有xml布局文件当然一切都 ...

  3. android通知栏自定义高度,Android 自定义通知栏适配

    之前做音乐播放器的需求中有要通知栏部分,发现不同手机显示的系统通知栏千奇百怪不统一,需要适配.分析发现目前大部分手机通知栏不是白色就是深色,因此经过考虑定义两种不同的布局,根据不同通知栏背景颜色来创建 ...

  4. Android自定义通知栏显示

    概述 本文主要想说一下android项目开发中经常会使用到通知机制中的通知栏框架(Notificaiton).通知栏位于设备的顶层,可以展开的通知列表.通知栏的主要作用大概可以分为三大块: 显示未读的 ...

  5. android 屏幕坐标色彩,Android自定义View实现颜色选取器

    Android 自定义View 颜色选取器,可以实现水平.竖直选择颜色类似 SeekBar 的方式通过滑动选择颜色. 效果图 xml 属性 1.indicatorColor 指示点颜色 2.indic ...

  6. android自定义通知栏样式,Android 通知栏自定义样式

    8.0系统的通知栏适配 在8.0之前我们通知栏的使用:notification = new NotificationCompat.Builder(mContext) .setWhen(System.c ...

  7. android通知栏的点击事件,android自定义通知栏以及点击事件

    1 自定义一个方法弹出通知栏 private void notifyCust() { notId++; NotificationManager notificationManager = (Notif ...

  8. Android App设置状态栏颜色

    非常简单,只要在res/values/color.xml文件里改变colorPrimaryDark的值就可以了,状态栏的颜色就是来自它. 进入android studio,在color.xml里面双击 ...

  9. Android设置顶部状态栏颜色

    参考博客:https://blog.csdn.net/qq_36982160/article/details/82350993 一张图了解android状态栏颜色划分 方法一:通过代码设置状态栏颜色 ...

最新文章

  1. BZOJ-3190-赛车-JLOI2013-暴力枚举
  2. C语言结构体指针的使用方法
  3. Could not open app - SAP UI5 error message
  4. ZeptoN正在将程序放入Java
  5. 【转】Oracle 执行动态语句
  6. 类的扩充 js中面向对象的技术
  7. 2_数据分析—认识pandas
  8. 终止一切网上销售和广告?电子烟悦刻天猫旗舰店却仍可购买
  9. 公司安排员工扫地,引发员工不满,程序员:保洁阿姨都请不起?
  10. JDK版本变化也太快了,意义有多大?
  11. c语言 滑窗法_滑窗算法
  12. 数据库E-R图——图书管理系统
  13. opendir php 中文,php的opendir是什么意思?
  14. exce中让两列数据一一对应_excel表格中两组数据如何对应匹配-EXCEL让两个表格中的两列数据一一对应...
  15. linux下raid0创建教程,在 Linux 下使用 RAID(二):使用 mdadm 工具创建软件 RAID 0 (条带化)...
  16. BZOJ3993 星际战争
  17. 在Ubuntu 12.10中安装QQ2012
  18. matlab画运动轨迹,Matlab画小球沿轨迹运动
  19. 智能手机内存完全透析
  20. Kafka | Java 消费者是如何管理TCP连接的? | 极客时间

热门文章

  1. HTML5实现简易计算器
  2. 深度网络设计技巧(五)之VAN:Visual Attention Network#超越Swin的纯CNN#
  3. 电机坐标变换simulink仿真(笔记)
  4. 成绩分析系统php,学生成绩查询分析系统 v20121212
  5. nginx 配置http跟https跳转时总是提醒重定向过多解决办法
  6. 温故而知新!java面试思维逻辑题
  7. 怎样用计算机命令修复软件,WINDOWS系统损坏无需重装,利用命令一键轻松修复...
  8. Cross-Frame Scripting漏洞解决---当你这个漏洞解决不了时,不妨看一下
  9. SFI立昌SEA方案与应用
  10. EasyX画围棋棋盘