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);
}
});
하지만 클릭 버튼을 클릭 수신기로 설정하고 있습니까? – Cata
대화 상자가 생성되는 리스너를 설정했지만 위의 코드로 리스너를 비활성화해야합니다. 그러나 청취자가 없어도 버튼이 내가 터치하지 않는 터치 상태에 반응하는 것을보아야합니다. 위의 리스너를 추가했습니다. –
서브 뷰 클래스를 추가하고 백그라운드를 그리는 대신 Window에 배경을 추가하는 것 같이 보입니다! 이것은 작동 중입니다 : getWindow(). setBackgroundDrawableResource (R.drawable.dialog_bg); 이제 창 크기를 설정하는 방법을 알아야합니다. –