我正在为这样的对话框使用自定义布局:
public Dialog onCreateDialog(Bundle savedInstanceState) {
Builder builder = new Builder(getActivity());
View dialogView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_code_dialog, null);
builder.setView(dialogView);
builder.setPositiveButton("", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
listener.onDialogPositiveClick(CodeDialogFragment.this);
}
});
return builder.create();
}
使用这个xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context="XXX.fragments.CodeDialogFragment">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="@string/code_text"
android:padding="@dimen/medium_body_padding"
android:id="@+id/code_text"
/>
</RelativeLayout>
我正在通过覆盖对话框片段上的onStart()方法替换标准的正面按钮:
@Override
public void onStart(){
super.onStart();
//replace default button with image
Button button = ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
button.setBackground(ContextCompat.getDrawable(this.getActivity(), R.drawable.copy_and_open_btn));
}
我的问题是我的设计需要对话框与按钮的宽度相同,但是当按钮被覆盖时,将宽度设置为wrap_content
并不起作用。如何在更换按钮后更改对话框的宽度以匹配按钮宽度?
更新
我已设法通过将此对话框添加到onStart()
方法来更改对话框的宽度:
int width = button.getBackground().getIntrinsicWidth();
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(getDialog().getWindow().getAttributes());
lp.width = width;
getDialog().getWindow().setAttributes(lp);
这会更改对话框的宽度,但会缩小按钮以保留填充。我无法解决填充来自哪里。
答案 0 :(得分:1)
如果您没有为正面按钮设置皮肤,但是整个Dialog是自定义的,那该怎么办?
final Dialog dialog = new Dialog(getContext());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.fragment_code_dialog);
Button doneButton = (Button) dialog.findViewById(R.id.done_button);
doneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
listener.onDialogPositiveClick(CodeDialogFragment.this);
dialog.dismiss();
}
});
dialog.show();
在这种情况下,您的正面按钮(R.id.done_button)是布局中的一个按钮(R.layout.fragment_code_dialog)。您可以完全按照设计布局视图和按钮,并将其作为一个整体使用,而不必为正面按钮设置外观。
答案 1 :(得分:1)
只需设置
getWindow().setLayout(int width,int height)` immediately after `show()
例如。
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//do other operations like inflating layout,setTile etc here
builder.show().getWindow().setLayout(600,900);'