Показать пример с Immersive Mode в Android приложении
Цена договорная
•
электронные деньги
Нужен работающий пример с Immersive Mode, описание этого мода здесь https://habrahabr.ru/post/200874/
Не получается нормально внедрить этот мод в приложение, приложение переходит в полноэкранный режим нормально, но при обратном выходе интерфейс оказывается под системными панелями, в статье указано, что можно для рутового элемента указать атрибут fitWindow, но в таком случае при выходе образуется черная полоса размером в верхний LinearLayout в моей разметке (paneltop в примере).
Приложил файл с разметкой. В моем случае переход в полноэкранный immersive mode переходит при двойном тапе по SurfaceView.
Групповые элементы приложения я скрываю, чтобы развернуть SurfaceView на всю область и возвращаю их обратно при переходе в обычный режим, вот эти панели оказываются под системными панелями (статус бар и кнопки):
public void HideElements() {
paneltop.setVisibility(View.GONE);
panelbottom.setVisibility(View.GONE);
mExpandableListView.setVisibility(View.GONE);
}
public void ShowElements() {
paneltop.setVisibility(View.VISIBLE);
panelbottom.setVisibility(View.VISIBLE);
mExpandableListView.setVisibility(View.VISIBLE);
}
так выглядит метод перехода в полноэкранку (код использования immersive mode здесь закомментирован):
public void setFullScreen() {
if (player != null) {
if (!mFullScreen) {
//if (Build.VERSION.SDK_INT < 19) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
HideElements();
/* }
else {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}*/
setFullscreenSurfaceSize();
mFullScreen = true;
} else {
//if (Build.VERSION.SDK_INT < 19) {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
ShowElements();
/* }
else {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}*/
setNormalSurfaceSize();
mFullScreen = false;
}
}
}
данный метод вызывается при двойном тапе по SurfaceView:
videoSurface = (SurfaceView) findViewById(R.id.videoSurface);
videoSurface.setClickable(true);
final GestureDetector clickDetector = new GestureDetector(this,
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
controller.show();
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
setFullScreen();
controller.show();
return true;
}
});
videoSurface.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return clickDetector.onTouchEvent(motionEvent);
}
});
Не получается нормально внедрить этот мод в приложение, приложение переходит в полноэкранный режим нормально, но при обратном выходе интерфейс оказывается под системными панелями, в статье указано, что можно для рутового элемента указать атрибут fitWindow, но в таком случае при выходе образуется черная полоса размером в верхний LinearLayout в моей разметке (paneltop в примере).
Приложил файл с разметкой. В моем случае переход в полноэкранный immersive mode переходит при двойном тапе по SurfaceView.
Групповые элементы приложения я скрываю, чтобы развернуть SurfaceView на всю область и возвращаю их обратно при переходе в обычный режим, вот эти панели оказываются под системными панелями (статус бар и кнопки):
public void HideElements() {
paneltop.setVisibility(View.GONE);
panelbottom.setVisibility(View.GONE);
mExpandableListView.setVisibility(View.GONE);
}
public void ShowElements() {
paneltop.setVisibility(View.VISIBLE);
panelbottom.setVisibility(View.VISIBLE);
mExpandableListView.setVisibility(View.VISIBLE);
}
так выглядит метод перехода в полноэкранку (код использования immersive mode здесь закомментирован):
public void setFullScreen() {
if (player != null) {
if (!mFullScreen) {
//if (Build.VERSION.SDK_INT < 19) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
HideElements();
/* }
else {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}*/
setFullscreenSurfaceSize();
mFullScreen = true;
} else {
//if (Build.VERSION.SDK_INT < 19) {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
ShowElements();
/* }
else {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}*/
setNormalSurfaceSize();
mFullScreen = false;
}
}
}
данный метод вызывается при двойном тапе по SurfaceView:
videoSurface = (SurfaceView) findViewById(R.id.videoSurface);
videoSurface.setClickable(true);
final GestureDetector clickDetector = new GestureDetector(this,
new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
controller.show();
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
setFullScreen();
controller.show();
return true;
}
});
videoSurface.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return clickDetector.onTouchEvent(motionEvent);
}
});
- Файлы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.