【问题标题】:Custom dialog box width and height自定义对话框宽度和高度
【发布时间】:2012-09-11 08:32:14
【问题描述】:

我正在尝试制作自定义对话框

LayoutInflater li = LayoutInflater.from(this);
        View view = li.inflate(R.layout.rate_layout, null);

        RelativeLayout rate = (RelativeLayout) view.findViewById(R.id.rateClick);
        RelativeLayout close = (RelativeLayout) view.findViewById(R.id.closeBtn);
        close.setClickable(true);
        rate.setClickable(true);    

       final AlertDialog.Builder  dd = new AlertDialog.Builder(this);          
       dd.setView(view);
       dd.setCancelable(false);

       final AlertDialog d = dd.create();
       d.show();

背景图片有4种分辨率,所以我只能做wrap content

这是我的 xml 文件

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



  <RelativeLayout
        android:id="@+id/rateClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:background="@drawable/rate_now_button" />

  <RelativeLayout
      android:id="@+id/imageView1"
      android:layout_width="219dp"
      android:layout_height="234dp"
      android:layout_centerHorizontal="true"
      android:layout_centerVertical="true"
      android:background="@drawable/pop_up" >

      <RelativeLayout
          android:id="@+id/closeBtn"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentRight="true"
          android:layout_alignParentTop="true"
          android:background="@drawable/close_button" >
      </RelativeLayout>

       <RelativeLayout
        android:id="@+id/rateClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:background="@drawable/rate_now_button" />

  </RelativeLayout>

</RelativeLayout>

这就是我得到的。我想如何删除对话框布局。白色的大边框。

【问题讨论】:

标签: java android eclipse android-layout


【解决方案1】:

不要使用 AlertDialog.Builder。试试这个吧。

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

Dialog d = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

您可以使用符合您标准的任何主题,或创建您自己的主题。请参阅对this questionthis other question 的答复。另见available themes

有关 setContentView()、setCancelable()、show() 和其他可能有用的方法的文档,请参阅 Dialog

【讨论】:

【解决方案2】:

你可以试试:

myDialog.show();
Window window = myDialog.getWindow();
window.setLayout(300, 300);

【讨论】:

  • 不,永远不要这样做,或者任何硬编码宽度和高度的事情
  • 这很好用。我们可以设置一个固定值,WindowManager.LayoutParams.WRAP_CONTENT 或屏幕宽度的百分比等。我们需要在调用 show() 方法后设置它。如果我们需要设置背景颜色,我们需要在调用 show() 方法之前调用它。 android.view.WindowManager.LayoutParams lp = new android.view.WindowManager.LayoutParams(); lp.copyFrom(deleteDialog.getWindow().getAttributes()); lp.dimAmount = 0.7f; deleteDialog.getWindow().setAttributes(lp); deleteDialog.show();
【解决方案3】:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
Double width = metrics.widthPixels*.7;
Double height = metrics.heightPixels*.7;
Window win = dialog.getWindow();
win.setLayout(width.intValue(), height.intValue());

【讨论】:

    【解决方案4】:

    试试这样的:

        dialog_item = new Dialog(Pre_Venda_Digitacao_2.this);
        dialog_item.setContentView(R.layout.layout_pre_venda_digitacao_add_produto);
        Util.softKeyboard(dialog_item.getWindow(), false);
    
        // Recuperar os componentes da janela e disponibilizar para as variáveis globais.
        dialog_Item_getComponentes();
    
        /***********************OnShow do Dialog*****************************/
        dialog_item.setOnShowListener(new OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                //Recupera a menor fonte dentro do layout passado
                float lower_font_size = AutoResizeTextView_Functions.Get_Lower_Font_Size(ll_add_produto, 1000);
    
                //Seta menor fonte recuparada anteriormente para os textos do layout passado
                AutoResizeTextView_Functions.Resize_Text(ll_add_produto, lower_font_size);
            }
        });
    
        dialog_item.setOnDismissListener(new OnDismissListener() {
    
            @Override
            public void onDismiss(DialogInterface dialog) {
                dialog_item = null;
                preVenda_Item = null;
            }
        });
    
        Display display = getWindowManager().getDefaultDisplay(); 
        int width       = display.getWidth();
    
        lp = new WindowManager.LayoutParams();
        lp.copyFrom(dialog_item.getWindow().getAttributes());
        lp.width = (int) (width - (width * 0.07) );  //Tira 7% da largura total da tela para deixar um espaço na janela
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
    
        dialog_item.getWindow().setAttributes(lp);
    
        dialog_item.show();
    

    【讨论】:

      【解决方案5】:

      在您的rate_layout.xml 中执行此操作:

      <!-- begin snippet: js hide: false -->
      <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:background="#0000"
      >
      

      如果你没有,你还需要创建和调用一个对话框片段:

      public class AddDialog extends DialogFragment
      {
          @Override
          public Dialog onCreateDialog(Bundle savedInstanceState)
          {
              AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
      
              LayoutInflater inflater = getActivity().getLayoutInflater();
      
              builder.setView(inflater.inflate(R.layout.rate_layout, null));
              return builder.create();
          }
      }
      

      然后在函数中调用Dialog

      public void SomeFunction()
      {
          DialogFragment d = new AddDialog();
          d.show(getSupportFragmentManager(), "some_dialog_refrence");
      }
      

      【讨论】:

        【解决方案6】:

        我们可以像这样设置自定义对话框的宽度、高度。

        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int screenHeight = displayMetrics.heightPixels;
        int screenWidth = displayMetrics.widthPixels;
        
        android.view.WindowManager.LayoutParams lp = new android.view.WindowManager.LayoutParams();
                lp.copyFrom(deleteDialog.getWindow().getAttributes());
        
        // If we need to set background color of activity
        // We need to set this before calling show() method
        lp.dimAmount = 0.7f;    
        deleteDialog.getWindow().setAttributes(lp); 
        deleteDialog.show();
        
        // we need to set width, height after calling show() method
        Window window = deleteDialog.getWindow();
        window.setLayout(screenWidth - screenWidth/2), WindowManager.LayoutParams.WRAP_CONTENT);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-28
          • 1970-01-01
          • 2011-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多