Подтвердить что ты не робот

Диалоговое окно Android Borderless

Я создал AlertDialog, используя AlertDialog.Builder, но граница диалога занимает слишком много места на экране. Как удалить границу? Я попытался использовать другое действие для эмуляции диалога с прозрачным фоном, но диалог используется повторно, а создание нового действия каждый раз приводит к значительным задержкам.

В ответе здесь упоминается, что его можно найти в ApiDemos, но я не могу его найти.

4b9b3361

Ответ 1

Хорошо, я отвечу на свой вопрос. В основном, вместо использования AlertDialog.Builder, создайте обычный диалог, используя его конструктор, и используйте подходящую тему вместо темы диалога по умолчанию.

Итак, ваш код будет выглядеть примерно так:

Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);

Надеюсь, это поможет кому-то еще.

Ответ 2

Вот мое решение, чтобы получить диалог, показывающий только ваш контент.

    Dialog dialog = new Dialog(this,R.style.ThemeDialogCustom);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    //you can move the dialog, so that is not centered
    // dialog.getWindow().getAttributes().y = 50; //50 should be based on density

    dialog.setContentView(yourLinearLayout);
    dialog.setCancelable(true);
    //dialog.setOnCancelListener(cancelListener);
    dialog.show();

themes.xml//находится в проекте /res/values ​​

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="ThemeDialogCustom">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowBackground">@color/transparent_color</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
   </style>
</resources>

colors.xml//также находится там

<?xml version="1.0" encoding="utf-8"?>
<resources>
       <color name="transparent_color">#00000000</color>
</resource>

Ответ 3

Использование android.R.style.Theme_Translucent_NoTitleBar работает, если вы хотите, чтобы диалог был в полноэкранном режиме. Альтернативой является создание собственного стиля, например:

<style
    name="Theme_Dialog_Translucent"
    parent="android:Theme.Dialog">
    <item
        name="android:windowBackground">@null</item>
</style>

Ответ 4

попробуйте следующее: D

 Dialog popUpView= new Dialog(this);
 popUpView.getWindow().setBackgroundDrawable(new ColorDrawable(0));

Ответ 5

Я добавил прозрачный пиксель для рисования и использовал следующий код:

dialog.getWindow().setBackgroundDrawableResource(R.drawable.transpix);

Ответ 6

если у вас есть 2 границы, вам нужно использовать ContextThemeWrapper, который будет отображать только одну границу, как вам хотелось бы:)

ContextThemeWrapper wrapper = new ContextThemeWrapper(this, android.R.style.Theme_Holo);
final LayoutInflater inflater = (LayoutInflater) wrapper.getSystemService(LAYOUT_INFLATER_SERVICE);
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper);

Ответ 7

Вы можете попросить застройщика принудительно выполнить обратный фон. Работал для меня, чтобы отобразить без полей экран заставки с источником png.

Ответ 8

В вашем файле ресурсов создайте xml файл с именем, например. null_image.xml, со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

<solid android:color="#0000" />

<size
    android:height="1dp"
    android:width="1dp" />

 </shape>

В вашем java-коде заберите диалоговое окно и задайте файл xml в качестве ресурса, который может быть выгружен, например: В зависимости от вашего контекста:

Dialog dialog = new Dialog(getContext());
Window window = dialog.getWindow();
window.setBackgroundDrawableResource(R.drawable.null_image);

Что он, наслаждайся.