如何实现Android沉浸式状态栏

如何实现Android沉浸式状态栏,第1张

Android在44的时候增加了透明状态栏与导航栏的功能,依托于这个新特性,我们可以开始跟随潮流,实现Android的沉浸式状态栏 其实上图展示的这个关于界面的代码非常简单/

关于界面

@author SuS

@time 20150729

/

public class AboutActivity extends BaseActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

thissetContentView(Rlayoutactivity_about);

setImmerseLayout(findViewById(Ridcommon_back));

initBackButton();

setTitleBar(Rstringdurian_about);

}

@Override

protected void onResume() {

superonResume();

}

@Override

protected void onPause() {

superonPause();

}

@Override

protected void onDestroy() {

superonDestroy();

}

}

现在请注意setImmerseLayout()这个方法,这个方法是在BaseActivity中实现的public class BaseActivity extends FragmentActivity {

private static final String TAG = BaseActivity;

public void initBackButton() {

ImageView backButton = (ImageView) thisfindViewById(Riddurian_back_image);

backButtonsetOnClickListener(new ViewOnClickListener() {

@Override

public void onClick(View v) {

finishActivity();

}

});

}

protected void setImmerseLayout(View view) {

if (BuildVERSIONSDK_INT >= BuildVERSION_CODESKITKAT) {

Window window = getWindow();

/windowsetFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS,

WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS);/

windowaddFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS);

int statusBarHeight = ScreenUtilgetStatusBarHeight(thisgetBaseContext());

viewsetPadding(0, statusBarHeight, 0, 0);

}

}

public void finishActivity() {

finish();

overridePendingTransition(Ranimpush_right_in, Ranimpush_right_out);

}

public void setTitleBar(int id) {

TextView tvName = (TextView) findViewById(Riddurian_title_text);

tvNamesetText(id);

}

}

使用 windowsetFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS, WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS); 或者 windowaddFlags(WindowManagerLayoutParamsFLAG_TRANSLUCENT_STATUS);

都可以使状态栏透明,但是关键是下面这两行代码,如果没有这两行,会是这样

那么这两行神奇的代码的原理是什么? 我们先看一下ScreenUtil中的getStatusBarHeight方法 /

用于获取状态栏的高度。 使用Resource对象获取(推荐这种方式)

@return 返回状态栏高度的像素值。

/

public static int getStatusBarHeight(Context context) {

int result = 0;

int resourceId = contextgetResources()getIdentifier(status_bar_height, dimen,

android);

if (resourceId > 0) {

result = contextgetResources()getDimensionPixelSize(resourceId);

}

return result;

}

这里是获得状态栏的高度,然后我们就可以通过设置common_back的padding属性 即:viewsetPadding(0, statusBarHeight, 0, 0)来达到终极效果 但是这里还是需要注意细节的,首先大家应该理解padding的含义:内边距 那么再看一下common_back的布局文件 在activity_aboutxml中我们是使用include引用的common_back

common_back的布局如下:

<framelayout android:background="@color/common_top_bg" android:id="@+id/durian_head_layout" android:layout_height="wrap_content" android:layout_width="match_parent" xmlns:android=">

android 上面标题栏的高度设置要根据状态栏设置保持一致。具体设置如下:

getWindow()getDecorView()getWindowVisibleDisplayFrame(rect);///取得整个视图部分,注意,如果你要设置标题样式,这个必须出现在标题样式之后,否则会出错

int top = recttop;////状态栏的高度,所以rectheight,rectwidth分别是系统的高度的宽度

View v = getWindow()findViewById(WindowID_ANDROID_CONTENT);///获得根视图

int top2 = vgetTop();///状态栏标题栏的总高度,所以标题栏的高度为top2-top

int width = vgetWidth();///视图的宽度,这个宽度好像总是最大的那个

int height = vgetHeight();////视图的高度,不包括状态栏和标题栏

如果只想取得屏幕大小,可以用

Display display = getWindowManager()getDefaultDisplay() ;

displaygetWidth();

displaygetHeight();代码见@Overridepublic void onWindowFocusChanged(boolean hasFocus) {

// TODO Auto-generated method stub

superonWindowFocusChanged(hasFocus);

Rect frame = new Rect();

getWindow()getDecorView()getWindowVisibleDisplayFrame(frame);

// 状态栏高度

int statusBarHeight = frametop;

View v = getWindow()findViewById(WindowID_ANDROID_CONTENT);

int contentTop = vgetTop();

// statusBarHeight是上面所求的状态栏的高度

int titleBarHeight = contentTop - statusBarHeight;

textView = (TextView) findViewById(RidtextView1);

textViewsetText(标题栏的高度 + IntegertoString(titleBarHeight) +

+ 标题栏高度 + statusBarHeight +

+ 视图的宽度 + vgetWidth()

+

+ 视图的高度(不包含状态栏和标题栏) + vgetHeight());

以上就是关于如何实现Android沉浸式状态栏全部的内容,包括:如何实现Android沉浸式状态栏、如何修改 Android 状态栏高度、android 上面标题栏该多高等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9533512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存