2009-12-10 5 views
27

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

Ответ от here упоминает, что его можно найти в ApiDemos, но я не могу его найти.

ответ

63

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

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

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

Надеется, что это помогает кто-то другое.

+4

если мы это сделаем, то dialog.setCanceledOnTouchOutside (true); не будет иметь никакого эффекта ... как с этим справиться? – amithgc

+0

Это именно то, что я искал. Я борюсь с системой создания диалога и десятками плохо написанных уроков в течение нескольких часов, и ваша единственная строка кода была всем, в чем я нуждался. Спасибо! – kodi

+3

, но он делает диалог в полноэкранном режиме. Чтобы предотвратить его отсутствие в полноэкранном режиме, я пишу приведенный выше код. – AndroidDev

24

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

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

+1 Это работает. Спасибо, Йонасб. –

1

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

2

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

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

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

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 // находится в проекте/Рез/значения

<?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> 
+4

Это приятное решение. Это прекрасно решает проблему, просто давая вам тот же диалог, НО без границы !!! Это более подходящее решение, чем принятое. –

+0

Спасибо за правильное решение. А также вы можете добавить dialog.setCanceledOnTouchOutside (true); для отклонения диалогового окна касания диалогового окна. –

7

попробовать это: D

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

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

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); 
0

В файле ресурсов создать файл 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); 

Вот и все.