2011-12-19 107 views
2

已解決:請參閱下面的答案自定義視圖背景對話框

我是子分類對話框,用於創建具有自定義背景的對話框。我在對話框中添加了一個子類視圖,它正確地繪製了位圖背景和佈局。但按鈕不會響應任何觸摸事件。

我懷疑的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); 
      } 
      }); 
+0

但是,你在哪裏設置點擊監聽器到你的確定按鈕? – Cata 2011-12-19 19:57:26

+0

我正在設置創建對話框的監聽器,但我必須使用上面的代碼禁用它。但即使沒有聽衆,我也應該看到按鈕對觸摸狀態作出反應,但我不知道。添加上面的監聽器。 – 2011-12-19 20:33:16

+0

看起來像不是添加子視圖類和繪製我的背景,我只需要將背景添加到窗口!這是工作: getWindow()。setBackgroundDrawableResource(R.drawable.dialog_bg); 現在我只需要弄清楚如何設置窗口大小。 – 2011-12-19 21:18:02

回答

1

,而不是添加子視圖類,並繪製背景的,所有我需要做的是補充:

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

我想我只是想這樣太辛苦了!