玩终结者2只显示网易游戏终结者的logo然后……就没有然后了,显卡是Intel的,没办法拖应用程序啊求解

这里首先用到了一个开源项目:直接上代码:(可以写在一个父类Activity中继承他)if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(Color.TRANSPARENT);//状态栏设置为透明色
tintManager.setNavigationBarTintEnabled(true);
tintManager.setNavigationBarTintResource(Color.TRANSPARENT);//导航栏设置为透明色
* Copyright (C) 2013 readyState Software Ltd
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
package com.sxyunchi.ycsmarthome.
import android.annotation.SuppressL
import android.annotation.TargetA
import android.app.A
import android.content.C
import android.content.res.C
import android.content.res.R
import android.content.res.TypedA
import android.graphics.drawable.D
import android.os.B
import android.util.DisplayM
import android.util.TypedV
import android.view.G
import android.view.V
import android.view.ViewC
import android.view.ViewG
import android.view.W
import android.view.WindowM
import android.widget.FrameLayout.LayoutP
import java.lang.reflect.M
* Class to manage status and navigation bar tint effects when using KitKat
* translucent system UI modes.
public class SystemBarTintManager {
// Android allows a system property to override the presence of the navigation bar.
// Used by the emulator.
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
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 =
* The default system bar tint color value.
public static final int DEFAULT_TINT_COLOR = 0x;
private static String sNavBarO
private final SystemBarConfig mC
private boolean mStatusBarA
private boolean mNavBarA
private boolean mStatusBarTintE
private boolean mNavBarTintE
private View mStatusBarTintV
private View mNavBarTintV
* 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);
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 =
bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
if ((winParams.flags & bits) != 0) {
mNavBarAvailable =
mConfig = new SystemBarConfig(activity, mStatusBarAvailable, mNavBarAvailable);
// device might not have virtual navigation keys
if (!mConfig.hasNavigtionBar()) {
mNavBarAvailable =
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 =
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 =
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() {
* Is tinting enabled for the system status bar?
* @return True if enabled, False otherwise.
public boolean isStatusBarTintEnabled() {
return mStatusBarTintE
* Is tinting enabled for the system navigation bar?
* @return True if enabled, False otherwise.
public boolean isNavBarTintEnabled() {
return mNavBarTintE
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);
if (mConfig.isNavigationAtBottom()) {
params = new LayoutParams(LayoutParams.MATCH_PARENT, mConfig.getNavigationBarHeight());
params.gravity = Gravity.BOTTOM;
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 mTranslucentStatusB
private final boolean mTranslucentNavB
private final int mStatusBarH
private final int mActionBarH
private final boolean mHasNavigationB
private final int mNavigationBarH
private final int mNavigationBarW
private final boolean mInP
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 = translucentStatusB
mTranslucentNavBar = traslucentNavB
@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 = plexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics());
@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)) {
if (mInPortrait) {
key = NAV_BAR_HEIGHT_RES_NAME;
key = NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME;
return getInternalDimensionSize(res, key);
@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);
@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)) {
} else if ("0".equals(sNavBarOverride)) {
return hasN
} 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);
@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);
// TODO this is not correct, but we don't really care pre-kitkat
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
float widthDp = metrics.widthPixels / metrics.
float heightDp = metrics.heightPixels / metrics.
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 mStatusBarH
* Get the height of the action bar.
* @return The height of the action bar (in pixels).
public int getActionBarHeight() {
return mActionBarH
* Does this device have a system navigation bar?
* @return True if this device uses soft key navigation, False otherwise.
public boolean hasNavigtionBar() {
return mHasNavigationB
* 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 mNavigationBarH
* Get the width of the system navigation bar when it is placed vertically on the screen.
* @return The 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 mNavigationBarW
* 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 mNavigationBarH
* 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 mNavigationBarW
}&span style="font-size:12"&@TargetApi(19)
private void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;//状态栏
final int bits1 = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;//导航栏
winParams.flags |= bits1;
winParams.flags |=
winParams.flags &= ~bits1;
winParams.flags &= ~
win.setAttributes(winParams);
}&/span&当完成上面一步时,效果如下:你会发现你的布局会与你的状态栏重合,如果你的手机有导航栏时,下方也会重合。这里的解决方案很多,我只说一种:&span style="font-size:12"&FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
lp.setMargins(0, Tools.getStatusHeight(this), 0,
NavigationBarHeight(this));
lp.setMargins(0, 0, 0,NavigationBarHeight(this));
layout.setLayoutParams(lp);//这里的layout是你的根部局。
*获取状态栏高度
public static int getStatusHeight(Activity activity) {
int statusHeight = 0;
Rect localRect = new Rect();
activity.getWindow().getDecorView()
.getWindowVisibleDisplayFrame(localRect);
statusHeight = localRect.
if (0 == statusHeight) {
Class&?& localC
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 statusH
*获取导航栏高度(这里先判断手机是否有导航栏)
public static int getNavigationBarHeight(Activity mActivity) {
int height = 0;
boolean hasNavigationBar =
Resources rs = mActivity.getResources();
int id = rs
.getIdentifier("config_showNavigationBar", "bool", "android");
if (id & 0) {
hasNavigationBar = rs.getBoolean(id);
Class systemPropertiesClass = Class
.forName("android.os.SystemProperties");
Method m = systemPropertiesClass.getMethod("get", String.class);
String navBarOverride = (String) m.invoke(systemPropertiesClass,
"qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
hasNavigationBar =
} else if ("0".equals(navBarOverride)) {
hasNavigationBar =
if (hasNavigationBar) {
int resourceId = rs.getIdentifier("navigation_bar_height",
"dimen", "android");
height = rs.getDimensionPixelSize(resourceId);
height = 0;
} catch (Exception e) {
&/span&这样之后就实现了透明的状态栏与导航栏。
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 16:24收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-1Step1:状态栏与导航栏半透明化
方法一:继承主题特定主题
在Android API 19以上可以使用****.TranslucentDecor***有关的主题,自带相应半透明效果
&style name=&FullBleedTheme& parent=&android:Theme.Holo.Light.NoActionBar.TranslucentDecor&&
&!-- API 19 theme customizations can go here. --&
方法二:自定义主题中使用一下设置
&item name=&android:windowTranslucentStatus& tools:targetApi=&kitkat&&true&/item&
&item name=&android:windowTranslucentNavigation& tools:targetApi=&kitkat&&true&/item&
方法三:在Activity中设置布局文件之后调用这些代码实现
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();
// Translucent status bar
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// Translucent navigation bar
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
SystemBarTint作者提供的变形方法如下
@TargetApi(19)
private void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
winParams.flags |=
winParams.flags &= ~
win.setAttributes(winParams);
Step2:此时状态栏占有的位置消失,方法同样有三
方法一:需要在布局文件根布局中添加一下代码
android:fitsSystemWindows=&true&
方法二:在主题中设置如下:
&item name=&android:fitsSystemWindows&&true&/item&
方法三:使用Java代码:
rootview.setFitsSystemWindows(true);
Step3:设定状态栏和导航栏背景色
这时候状态栏半透明,显示的颜色根据根布局的背景颜色而来,由此可以给根布局背景色位所需的颜色即可。
但是这样会给根布局的子布局控件的背景设置带来不便。
所以采用SystemBarTint实现沉浸式状态栏
方法如下:
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setNavigationBarTintEnabled(true);
tintManager.setTintColor(ContextCompat.getColor(this, R.color.colorPrimary));
使用SystemBarTint不能给状态栏设置多个颜色,不能自动取色?
Android5.0(API 21)之后ActionBar主题中几个颜色代表的意义
&style name=&AppTheme& parent=&android:Theme.Material&&
&!-- Main theme colors --&
your app branding color for the app bar --&
&item name=&android:colorPrimary&&@color/primary&/item&
darker variant for the status bar and contextual app bars --&
&item name=&android:colorPrimaryDark&&@color/primary_dark&/item&
theme UI controls like checkboxes and text fields --&
&item name=&android:colorAccent&&@color/accent&/item&
阅读(...) 评论()

我要回帖

更多关于 网易游戏终结者2官网 的文章

 

随机推荐