1

我想创建一个Dialog自定义布局。我希望它width与手机屏幕的宽度相同,并且heightWRAP_CONTENT.

这是我尝试过的:

Dialog dialog = new Dialog(context, R.style.DialogSlideAnim);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.dialog_share);
        dialog.setCanceledOnTouchOutside(true);

        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        int width = metrics.widthPixels;

        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        layoutParams.copyFrom(dialog.getWindow().getAttributes());
        layoutParams.width = width;
        layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
        layoutParams.gravity = Gravity.BOTTOM;
        dialog.getWindow().setAttributes(layoutParams);

问题是dialog仅占屏幕宽度的 90% 左右,dialog. 我怎样才能让它完全填满手机的宽度?

4

2 回答 2

3

公认的解决方案简单且有效,但您也可以尝试以下解决方案来实现要求。

第 1 步:创建 Dialog 类的子类,因为您要创建自定义对话框。

public class ARProgressDialog extends Dialog
{
    Activity context;
    public ARProgressDialog(Context context,int id) {
        // TODO Auto-generated constructor stub
        super(context,id);
        this.context=(Activity) context;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.progress_dialog); // Your custom layout

        // BELOW CODE IS USED TO FIND OUT WIDTH OF ANY DEVICE 
        DisplayMetrics displaymetrics = new DisplayMetrics();
        context.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int width = displaymetrics.widthPixels;

        // BELOW CODE IS USED TO SET WIDHT OF DIALOG 
        LinearLayout layout = (LinearLayout)findViewById(R.id.dialogLinearLayout); // this is the id of your parent layout defined in progress_dialog.xml
        LayoutParams params = layout.getLayoutParams();
        params.width = width;
        layout.setLayoutParams(params);     
        ...// add your remaining code
    }

} 

第 2 步:显示对话框。

ARProgressDialog dialog=new ARProgressDialog(this,R.style.MyTheme);
dialog.show();

第 3 步:MyTheme.xml 的代码

<style name="MyTheme" parent="android:Theme.Holo.Dialog">
    <item name="android:windowBackground">#00000000</item>
    <item name="android:backgroundDimEnabled">true</item>
</style>
于 2016-08-05T09:38:40.050 回答
2

这可能对您有帮助:

dialog.setContentView(R.layout.my_custom_dialog);
dialog.getWindow().setBackgroundDrawable(null);

或者你可以尝试style这样的课程:

<style name="Theme_Dialog" parent="android:Theme.Holo.Dialog">
    ...
    <item name="android:windowMinWidthMajor">100%</item>
    <item name="android:windowMinWidthMinor">100%</item>
</style>
于 2016-08-05T06:57:13.173 回答