具有自定义视图背景的对话框
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);
我想我只是太努力了!
【讨论】:
以上是关于具有自定义视图背景的对话框的主要内容,如果未能解决你的问题,请参考以下文章