具有自定义视图背景的对话框

Posted

技术标签:

【中文标题】具有自定义视图背景的对话框【英文标题】:Dialog with custom view background 【发布时间】:2012-01-23 21:34:26 【问题描述】:

已解决:请参阅下面的答案

我将 Dialog 子类化以创建具有自定义背景的对话框。我在对话框中添加了一个子类视图,它正在正确绘制位图背景和布局。但是按钮不会响应任何触摸事件。

我怀疑必须在 Dialog 类中加载 LinearLayout,但我认为我必须在视图类中加载它才能在位图上绘制。

我对 android 开发者完全陌生,所以我为这个问题道歉。这是我正在做的事情:

public class CustomDialog extends Dialog 

private static final String TAG = "CustomDialog";
private static int layoutWidth = 640;
private static int layoutHeight = 400;

public CustomDialog(Context context) 

    super(context, android.R.style.Theme_Translucent_NoTitleBar);

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    LayoutParams params = getWindow().getAttributes(); 
    params.width = LayoutParams.FILL_PARENT;
    getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);

//      setContentView(R.layout.layout_dialog); // This works fine, the buttons work
    setContentView(new NewLayoutDialogView(context));


public static class NewLayoutDialogView extends View 

    private Drawable bg;
    public LinearLayout layout;
    private OnColorChangedListener mListener;

    public interface OnBrushChangedListener 
        void brushChanged(float radius);
    

    NewLayoutDialogView(Context context)   

        super(context);

        InputStream stream = getResources().openRawResource(R.drawable.dialog_bg);
        bg = NinePatchDrawable.createFromStream(stream, null);

        layout = (LinearLayout) LinearLayout.inflate(context, R.layout.layout_dialog, null);

        Button ok = (Button) layout.findViewById(R.id.ok_button);

        layout.setWillNotDraw(false);

        layout.setVisibility(View.VISIBLE);
        setVisibility(View.VISIBLE);

        layout.measure(layoutWidth, layoutHeight);
        layout.layout(0, 0, layoutWidth, layoutHeight);
    

    @Override 
    protected void onDraw(Canvas canvas)

        if (bg != null) 
          bg.setBounds(10, 0, canvas.getWidth(), canvas.getHeight());
          bg.draw(canvas);
        

        layout.draw(canvas);
    
 

编辑:这就是我设置监听器的方式。使用 View 子类时,我必须禁用此代码,如图所示。但按钮仍应在没有侦听器的情况下显示单击状态。

        Dialog dialog = new ChangeLayoutDialog(getActivity());      

        Button cancel = (Button) dialog.findViewById(R.id.cancel_button);
        cancel.setTypeface(font);
        cancel.setOnClickListener(new View.OnClickListener() 
          public void onClick(View v) 
              dialog.dismiss();
             
          );

        Button ok = (Button) dialog.findViewById(R.id.ok_button);
        ok.setTypeface(font);
        ok.setOnClickListener(new View.OnClickListener() 
          public void onClick(View v) 
              dialog.dismiss();
              setCellLayout(layoutFile);
             
          );

【问题讨论】:

但是你在哪里为你的确定按钮设置一个点击监听器? 我正在设置创建对话框的侦听器,但我必须使用上面的代码禁用它。但即使没有听众,我也应该看到按钮对我没有的触摸状态做出反应。添加了上面的监听器。 看起来我不需要添加子视图类并绘制我的背景,我需要做的就是将背景添加到窗口!这是有效的: getWindow().setBackgroundDrawableResource(R.drawable.dialog_bg);现在我只需要弄清楚如何设置窗口大小。 你可以试试这个:getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);并输入一些值而不是填充父级......祝你好运! 【参考方案1】:

我不需要添加子视图类和绘制背景,只需添加:

getWindow().setBackgroundDrawableResource(R.drawable.dialog_bg);

我想我只是太努力了!

【讨论】:

以上是关于具有自定义视图背景的对话框的主要内容,如果未能解决你的问题,请参考以下文章

java Android - 具有自定义视图的对话框

java Android - 具有自定义视图的对话框

java Android - 具有自定义视图的对话框

java Android - 具有自定义视图的对话框

java Android - 具有自定义视图的对话框

java Android - 具有自定义视图的对话框