1

Dialogカスタムレイアウトで作成したい。私はそれwidthが電話スクリーンの幅と同じであることを望みheightますWRAP_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:カスタムダイアログを作成したいので、ダイアログクラスのサブクラスを作成します。

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 に答える