Мой вопрос касается возможности Android для использования дополнительного экрана устройства, т.е. android.app.Presentation
Я использую эту оболочку: https://github.com/commonsguy/cwac-presentation
К сожалению, я не могу заставить второй экран быть в полноэкранном режиме: хотя его ширина полностью соответствует экрану, его высота всегда ограничена полосой в центре экрана, примерно 1/4 высоты экрана.
Соответственно, все его содержимое отображается в этих узких границах, а остальные части экрана остаются черными и бесполезными.
Для тех, кто не имеет представления об этом API,android.app.Presentation
– это особый тип Dialog
, который отображается на дополнительном экране устройства.
Оболочка, о которой я упоминал выше, основана на PresentationFragment
, которая расширяет DialogFragment
. . Пользователь создает класс, расширяющий PresentationFragment
, и в его переопределенном onCreateView()
создает макет, который он хочет отображать на втором экране. Пример:
public class CustomPresentationFragment extends PresentationFragment {
public static CustomPresentationFragment newInstance(Context ctxt,
Display display) {
CustomPresentationFragment frag=new CustomPresentationFragment();
frag.setDisplay(ctxt, display);
//we may prepare bundle to pass, if necessary
//Bundle b=new Bundle();
//b.putString("key1", value1);
//b.putString("key2", value2);
//frag.setArguments(b);
return(frag);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View myView = new View(getContext());
//here we create layout that we want to be displayed on second screen, and return it
return(myView);
}
}
Это реализация PresentationFragment
. Как мы видим, он содержит переменную Presentation
:
package com.commonsware.cwac.preso;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.Presentation;
import android.content.Context;
import android.os.Bundle;
import android.view.Display;
public abstract class PresentationFragment extends DialogFragment
{
private Display display = null;
private Presentation preso = null;
public Dialog onCreateDialog(Bundle savedInstanceState)
{
if (this.preso == null) {
return super.onCreateDialog(savedInstanceState);
//instead of simply returning super value, I have tried the following here,
//with no success:
//
//Dialog dlg = super.onCreateDialog(savedInstanceState);
//dlg.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
//dlg.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//dlg.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
//return dlg;
}
return this.preso;
}
public void setDisplay(Context ctxt, Display display) {
if (display == null) {
this.preso = null;
}
else {
this.preso = new Presentation(ctxt, display, getTheme());
//since Presentation is Dialog, I have tried the same here as well,
//no success:
//this.preso.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
//this.preso.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//this.preso.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
}
this.display = display;
}
public Display getDisplay() {
return this.display;
}
protected Context getContext() {
if (this.preso != null) {
return this.preso.getContext();
}
return getActivity();
}
}
РЕДАКТИРОВАТЬ. Это onCreateView()
из одного из моих PresentationFragments:
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
String uri = "somefilepath";
File imgFile = new File(uri);
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView view = new ImageView(getContext());
view.setImageBitmap(myBitmap);
view.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
RelativeLayout pRelative = new RelativeLayout(getContext());
pRelative.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
pRelative.setGravity(Gravity.CENTER);
pRelative.addView(view);
return pRelative;
}
onCreateView()
), я ничем не могу вам помочь. Попробуйте запустить прилагаемое демонстрационное приложение, которое не демонстрирует описанного вами поведения. Если вы получаете такое же поведение, что-то должно быть не так с вашей конкретной средой. Если демонстрационное приложение ведет себя правильно, сравните свою реализацию с демонстрационной. - person CommonsWare   schedule 16.12.2014onCreateView()
, один фрагмент возвращает RelativeLayout с ImageView внутри, второй фрагмент возвращает RelativeLayout с WebView внутри, третий фрагмент возвращает RelativeLayout с VideoView внутри. Все соответствует тому, как вы описали, как использоватьonCreateView()
- person mangusta   schedule 16.12.2014