2017-04-06 14 views
3

대화 상자의 최대 높이를 설정하고 싶습니다. dp 또는 px에 의해 설정된 것과 같은 사용자 정의 높이가 아닙니다. 상대적으로 현재의 장치 화면 크기와 대화 할 수있는 최대 높이를 설정하고 싶습니다.어떻게 Dialog에 최대 높이를 설정할 수 있습니까?

+0

: 100 %

당신이 dialog.show 이전 또는 이후에 추가 할 수 있습니다()

이 내 코드? – DevMoutarde

+0

고정시키고 자한다면 화면의 실제 크기를 기반으로하기 때문에 dp를 설정해야합니다. –

답변

2

최대 높이를 직접 설정할 수 없습니다. 그냥 대체, 높이가 설정하려는 최대 높이보다 큰 경우 높이를 재설정 할 수 있습니다.

WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
lp.copyFrom(dialog.getWindow().getAttributes()); 
int dialogWidth = lp.width; 
int dialogHeight = lp.height; 

if(dialogHeight > MAX_HEIGHT) { 
    d.getWindow().setLayout(width,MAX_HEIGHT); 
} 
1
DisplayMetrics displaymetrics = new DisplayMetrics(); 

getActivity().getWindowManager().getDefaultDisplay() 
.getMetrics(displaymetrics); 
int width = (int) (displaymetrics.widthPixels); 
int height = (int) (displaymetrics.heightPixels); 
d.getWindow().setLayout(width,height); 
d.show(); 

여기서 d는 대화 상자입니다. 이 코드는 대화 상자를 전체 화면으로 설정합니다.

+0

Noooo. 기본 대화 상자의 최대 높이입니다. 대화 상자 높이를 화면 높이와 동일하게하지 않고 기본 대화 상자 높이의 최대 값으로 만들려면 –

+0

기본 대화 상자 높이는 입력 한 텍스트에 따라 다릅니다. 귀하의 요구 사항은 무엇입니까? – EagleEye

+0

그리고 고정 된 높이의 대화 상자를 설정하고 싶습니다. –

3
Dialog dialog = new Dialog(context); 
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog.setContentView(R.layout.dialog_example); 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
lp.copyFrom(dialog.getWindow().getAttributes()); 
lp.width = WindowManager.LayoutParams.WRAP_CONTENT; 
lp.height = WindowManager.LayoutParams.MATCH_PARENT; 
//lp.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 330/*height value*/, getResources().getDisplayMetrics()); for custom height value 
dialog.getWindow().setAttributes(lp); 
dialog.show(); 

나는이 문제를 해결할 수 있다고 생각합니다. 하나는 부모 속성과 일치하는 대화 상자 높이를 설정하는 방법이고 두 번째는 맞춤 값으로 높이를 설정하는 방법입니다.

1

수 있습니다. addOnLayoutChangeListener()가 유용 할 수 있습니다. 높이처럼

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    final View view = LayoutInflater.from(this).inflate(R.layout.custom_alertdialog, null); 
    builder.setMessage("TestMessage xxxxxxx"); 
    builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 

    builder.setView(view); //在setView之前调用builder的原有设置控件方法时,能展示设置的控件,之后设置的则不展示!! 
    AlertDialog dialog = builder.create(); 
    dialog.getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_bk_cnoneralert)); 
    //builder.show(); //用这个的话,背景并不会改变,依旧是默认的 

    dialog.show(); //必须用这个show 才能显示自定义的dialog window 的背景 

    //这种设置宽高的方式也是好使的!!!-- show 前调用,show 后调用都可以!!! 
    view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
     @Override 
     public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, 
            int oldRight, int oldBottom) { 
      int height = v.getHeight(); 
      int contentHeight = view.getHeight(); 

      LogUtils.e("高度", height + "/" + "/" + contentHeight); 
      int needHeight = 500; 

      if (contentHeight > needHeight) { 
       //注意:这里的 LayoutParams 必须是 FrameLayout的!! 
       //NOTICE : must be FrameLayout.LayoutParams 
       view.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 
         needHeight)); 
      } 
     } 
    });