[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();
}
|