Ошибка полноэкранного фрагмента Android
Я создал полноэкранный DialogFragment, в котором я добавил прозрачный черный фон. Конечный результат можно увидеть на скриншоте ниже:
Вот как я это сделал:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// if >= LOLLIPOP, then I color the the statusbar
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
dialog.getWindow().setStatusBarColor(SOME_COLOR_HERE);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogFullScreen);
}
Это тема, которую я установил в setStyle():
<style name="DialogFullScreen">
<item name="android:windowIsFloating">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
И это макет, который я раздуваю для фрагмента:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="br.com.emotiondigital.sempreeditora.Fragments.LockedContentFragment"
android:id="@+id/popup_parent_layout">
<LinearLayout
android:clickable="true"
android:id="@+id/popup_black_bg"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#b9000000"/>
<RelativeLayout
android:id="@+id/popup_main_layout"
android:clickable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@android:color/white"
android:elevation="10dp"
android:layout_marginBottom="70dp"
android:layout_marginTop="70dp"
>
<LinearLayout
android:layout_alignTop="@+id/bg_popup"
android:layout_alignBottom="@+id/bg_popup"
android:layout_alignRight="@+id/bg_popup"
android:layout_alignLeft="@+id/bg_popup"
android:background="@color/bg_grey"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="51dp"
android:orientation="vertical"
android:background="@android:color/white"
android:elevation="2dp"
>
<TextView
android:id="@+id/selectNewspaperText"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:gravity="center"
android:text="@string/selecione_jornal"
android:layout_marginLeft="15dp"
android:textSize="20dp"
android:textColor="@color/colorPrimary"
/>
<LinearLayout
android:orientation="vertical"
android:id="@+id/topLine"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimaryDark"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:overScrollMode="ifContentScrolls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recyclerViewJornais"
/>
<LinearLayout
android:orientation="vertical"
android:id="@+id/bottomLine"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimaryDark"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/btnCancelar"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/white"
android:textColor="@color/colorPrimary"
android:text="@string/cancelar"/>
<Button
android:id="@+id/btnOk"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textColor="@android:color/white"
android:background="@color/colorPrimary"
android:text="@string/ok"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Эти скриншоты были с Xperia Z3 под управлением Android 5.1. Это прекрасно работает на многих устройствах, протестировано даже на некоторых бюджетных устройствах Samsung 4.2. Проблема в том, что он не работает на Nexus 4, также с Android 5.1. На Nexus 4 кажется, что прозрачность не работает, и представление многократно повторяется на фоне. Вот скриншот:
Вот еще одно сравнение между Xperia Z3 и Nexus 4:
Что происходит на Nexus 4? Любая помощь приветствуется!
2 ответа
Создайте пользовательский макет для диалога, затем используйте код ниже в onCreate или в первом методе диалога.
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.your_dialog_layout);
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
Это работа для меня. Я использовал метод для создания диалогового окна во весь экран.
Работал для меня, используя следующий код в onCreate() `
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);`
используйте следующее в onStart()
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);