自定义视图背景对话框
问题描述:
已解决:请参阅下面的答案自定义视图背景对话框
我是子分类对话框,用于创建具有自定义背景的对话框。我在对话框中添加了一个子类视图,它正确地绘制了位图背景和布局。但按钮不会响应任何触摸事件。
我怀疑的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);
我想我只是想这样太辛苦了!
但是,你在哪里设置点击监听器到你的确定按钮? – Cata 2011-12-19 19:57:26
我正在设置创建对话框的监听器,但我必须使用上面的代码禁用它。但即使没有听众,我也应该看到按钮对触摸状态作出反应,但我不知道。添加上面的监听器。 – 2011-12-19 20:33:16
看起来像不是添加子视图类和绘制我的背景,我只需要将背景添加到窗口!这是工作: getWindow()。setBackgroundDrawableResource(R.drawable.dialog_bg); 现在我只需要弄清楚如何设置窗口大小。 – 2011-12-19 21:18:02