2011-12-19 2 views
2

해결 : 아래 답변보기사용자 정의보기 배경을 가진 대화 상자

나는 사용자 정의 배경을 가진 대화 상자를 만들기 위해 대화 상자를 하위 분류하고 있습니다. 대화 상자에 하위 클래스 뷰를 추가했으며 비트 맵 배경과 레이아웃을 올바르게 그리는 중입니다. 그러나 버튼은 모든 터치 이벤트에 응답하지 않습니다.

LinearLayout이 Dialog 클래스에로드되어야한다고 생각합니다. 그러나 뷰 클래스에서로드하여 비트 맵 위에 그려야한다고 생각합니다.

저는 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

+0

대화 상자가 생성되는 리스너를 설정했지만 위의 코드로 리스너를 비활성화해야합니다. 그러나 청취자가 없어도 버튼이 내가 터치하지 않는 터치 상태에 반응하는 것을보아야합니다. 위의 리스너를 추가했습니다. –

+0

서브 뷰 클래스를 추가하고 백그라운드를 그리는 대신 Window에 배경을 추가하는 것 같이 보입니다! 이것은 작동 중입니다 : getWindow(). setBackgroundDrawableResource (R.drawable.dialog_bg); 이제 창 크기를 설정하는 방법을 알아야합니다. –

답변

1

대신 서브 뷰 클래스를 추가하고 배경을 그리는, 내가 할하는 데 필요한 모든 추가했다 :

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

난 그냥 너무 열심히 노력했다 생각!

관련 문제