自定义对话框没有标题和边框

时间:2011-03-23 15:17:15

标签: android layout

根据此处的代码, http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog。我成功地能够创建一个带有背景和按钮的自定义对话框,但仍然有些不对劲。标题栏还有一个空间,视图周围有边框。如何摆脱这些头衔和边界?

这是我的对话

Dialog pauseMenu = new Dialog(this,R.xml.pause_dialog);
pauseMenu.setContentView(R.layout.pause_menu);
return pauseMenu;

这是我的暂停布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:background="@drawable/pause_menu_cropped" android:layout_gravity="center" android:gravity="center|center_horizontal">
    <TableLayout android:layout_width="wrap_content" android:id="@+id/tableLayout1" android:layout_height="wrap_content">
        <ImageButton android:src="@drawable/pause_button_quit" android:layout_width="wrap_content" android:background="@drawable/pause_button_quit" android:id="@+id/imageButton2" android:layout_height="wrap_content"></ImageButton>
        <ImageButton android:src="@drawable/pause_button_option" android:layout_width="wrap_content" android:background="@drawable/pause_button_option" android:id="@+id/imageButton1" android:layout_height="wrap_content"></ImageButton>
    </TableLayout>
</LinearLayout>

8 个答案:

答案 0 :(得分:90)

我认为这会帮助你

gameOver将是对话框名称,在setContentView中它将是你的自定义对话框布局

gameOver = new Dialog(Main.this);
gameOver.requestWindowFeature(Window.FEATURE_NO_TITLE);
gameOver.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
gameOver.setCancelable(false);
gameOver.setContentView(R.layout.gameover);

答案 1 :(得分:17)

如果没有标题,则无法创建对话框。在该教程中进一步提到:

  

使用基本对话框进行的对话   班级必须有头衔。如果你不这样做   调用setTitle(),然后使用空格   标题仍然是空的,但仍然   可见。如果你不想要一个标题   所有,然后你应该创建你的   使用AlertDialog的自定义对话框   类。但是,因为一个AlertDialog   最简单的创建   AlertDialog.Builder类,你没有   有权访问setContentView(int)   上面使用的方法。相反,你必须   使用setView(View)。这个方法接受   一个View对象,所以你需要膨胀   布局的根视图对象来自   XML。

This answer使用自定义样式解决了标题和边框问题。

答案 2 :(得分:9)

  1. 创建一个这样的类:

    public class CustomDialog extends Dialog {
        public AlertFinishiView(Context context) {
            super(context);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.dialog);
            getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        }
    }
    
  2. 使用此名称对话框在layut文件夹中创建一个xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@android:color/transparent">
    
       <RelativeLayout 
          android:layout_width="220dp" 
          android:layout_height="140dp" 
          android:layout_centerHorizontal="true" 
          android:layout_centerVertical="true"            
          android:background="@drawable/bg_custom_dialog" >
    
          <Button android:id="@+id/button1" 
             android:layout_width="wrap_content" 
             android:layout_height="wrap_content" 
             android:layout_centerHorizontal="true" 
             android:layout_centerVertical="true" 
             android:text="Button" />
    
       </RelativeLayout>
    
    </RelativeLayout>
    
  3. 将上面的图片添加到名为bg_custom_dialog.9.png

  4. 的drawable文件夹中

    bg_custom_dialog

    1. 致电您的活动:

      CustomDialog customDialog = new CustomDialog(this);
      customDialog.show();
      

答案 3 :(得分:3)

Dialog dialog = new Dialog(Main.this);
dialog.getWindow();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

答案 4 :(得分:3)

Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

答案 5 :(得分:1)

在styles.xml中尝试以下样式:

<style name="free_floating_dialog" parent="@android:style/Theme.Holo.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowCloseOnTouchOutside">false</item>
</style>

有关更多选项,请参阅“Theme.Holo.Light.Dialog”,它是Android源代码的一部分(自Honeycomb以来),或您基于其他任何其他对话框样式。

然后只需使用此样式作为您自己的对话框的基础:

Dialog myDialog = new Dialog(getActivity(), R.style.free_floating_dialog);
myDialog.setContentView(R.layout.myContent);

答案 6 :(得分:1)

使用它,它完美地运作;

             dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //before     
             dialog.setContentView(R.layout.your_dialog_layout);

答案 7 :(得分:0)

我使用此代码并且工作正常:

AlertDialog.Builder builder = new AlertDialog.Builder(contextActivity,android.R.style.Theme_Holo_Dialog_NoActionBar);
AlertDialog alertDialog = builder.create();
alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.setView(myLayout,0,0,0,0);
alertDialog.show();