[DESCRIPTION]
在Gallery中动态设置底部虚拟按键NavigationBar 和StatusBar 且Gallery2 的GLSurfaceView全屏沉浸显示,从而实现真正的fullscreen。
[SOLUTION]
根据实际需要这种模式的显示的页面添加如下flag
1. Hide Bars
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
int
flags = 0 ; flags|=
View.SYSTEM_UI_FLAG_FULLSCREEN |View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_IMMERSIVE |View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; setSystemUiVisibility(flags); |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION --> 隐藏navigationbar
View.SYSTEM_UI_FLAG_FULLSCREEN --> 隐藏statusbar
View.SYSTEM_UI_FLAG_FULLSCREEN --> 隐藏statusbar
2.Show Bars
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
|
int
flags = 0 ; flags|= View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; setSystemUiVisibility(flags); |
这3个flag 需要配合使用,清除所有的Flag,半透明显示SYSTEM UI ,同时使得当前Activity的UI 不被resize 并显示在SYSTEM UI 下面。
==========================
以PhotoPage为例,实现全屏沉浸模式,需要做如下改动:
文件:PhotoPage.java
1. onResume()方法中增加如下code:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
protected
void
onResume(){ ... //
add by mtk start Window
win = mActivity.getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); win.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); //
add by mtk end ... } |
2. onDestroy()方法中增加如下code:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
protected
void
onDestroy() { ... //add
by mtk start Window
win = mActivity.getWindow(); win.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); win.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); //add
by mtk end super .onDestroy(); } |
3. showBars()方法增加如下code:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
private
void
showBars() { ... //add
by mtk start Window
win = mActivity.getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); win.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); //add
by mtk end mActionBar.show(); mActivity.getGLRoot().setLightsOutMode( false ); ... } |
4. hideBars()增加如下改动:
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
private
void
hideBars() { ... mActionBar.hide(); //add
by mtk start Window
win = mActivity.getWindow(); win.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); int
flags = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_FULLSCREEN |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE); win.getDecorView().setSystemUiVisibility(flags); win.setNavigationBarColor(Color.TRANSPARENT); //add
by mtk end //mActivity.getGLRoot().setLightsOutMode(true);
//delete by mtk ... } |
上述修改可以实现大图界面图片全屏显示,但会导致编辑、连拍按钮被Navigation Bar覆盖,如下图所示:
如下修改仅供参考:
Photopage_bottom_controls.xml 设置
[XML]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
android:id="@+id/photopage_bottom_controls" android:padding="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:orientation="horizontal" android:fitsSystemWindows=”true”<--!
add by mtk --> android:visibility="gone"> |
ContainerLayer.java
1.增加头文件
[Java]hide
1
2
3
|
import
android.content.res.Resources; import
android.content.res.Configuration; |
2.增加新方法
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
|
private
static
int
getNavigationBarHeight(Activity activity){ Resources
resources = activity.getResources(); int
resId = resources.getIdentifier( "navigation_bar_height" ,
"dimen" ,
"android" ); int
height = resources.getDimensionPixelSize(resId); return
height; } |
- 修改showLeftBottomIcon()方法
[Java]hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
private
void
showLeftBottomIcon() { mContainer.setVisibility(View.VISIBLE); //
add by mtk start int
orientation = mActivity.getResources().getConfiguration().orientation; int
h = getNavigationBarHeight(mActivity); if
(orientation == Configuration.ORIENTATION_PORTRAIT) { mContainer.setX( 0 ); mContainer.setY(-h); } else { mContainer.setY( 0 ); mContainer.setX(-h); } //add
by mtk end if
(mMediaData.subType == MediaData.SubType.CONSHOT) { mConShotIcon.setVisibility(View.VISIBLE); } } |
PhotoPage.java新增如下方法:
[Java]hide
1
2
3
4
5
6
7
8
9
|
@Override public
void
onConfigurationChanged(Configuration config) { super .onConfigurationChanged(config); toggleBars(); } |