标题在AlertDialog上垂直居中
标题在AlertDialog上垂直居中
我有一个AlertDialog标题,在对话框的消息内容不需要滚动时,标题会垂直居中,如下图所示:
现在,当消息内容需要滚动时,标题不再垂直居中,如下图所示:
我尝试使用以下代码进行初始设置标题和图标:
builder.setTitle("帮助");
builder.setIcon(R.drawable.help);
然而,在上面的代码中,标题在第二种情况下无法居中。后来,我尝试使用XML布局来设置标题,并使用builder.setCustomTitle(...)来设置标题,XML代码如下:
我尝试使用minHeight、gravity、layout_gravity和padding属性。我通过使用padding属性将标题在第二种情况下居中,但第一种情况下的标题不再居中。虽然padding可以起作用,但我希望找到一个解决方案,使标题在每种情况下都居中,无论消息是否需要滚动。我觉得我可能忽略了一些简单和直接的东西。
另外,消息内容只是使用builder.setMessage()来设置。
编辑1:我应该澄清一下,我不想让标题水平居中,只想让它垂直居中,并且左对齐加上边距/填充。最终,我希望每个标题栏都看起来像上面的第一张图片。
编辑2:这是对话框的Java代码,如果有帮助的话:
public class HelpDialog extends DialogFragment {
// Bundle variables/args
final static String ARG_HELP = "help";
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.custom_help_title, null);
Bundle args = getArguments();
//initial way it was done
//builder.setTitle("Help");
//builder.setIcon(R.drawable.help);
//now with the custom xml
builder.setCustomTitle(view);
builder.setMessage(args.getCharSequence(ARG_HELP));
builder.setPositiveButton("Done", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
return builder.create();
}
}
问题的原因是AlertDialog的标题没有垂直居中显示。解决方法是移除标题的padding。
在这段代码中,AlertDialog的标题是通过创建一个TextView并设置为custom title来实现的。然而,标题文本的垂直居中显示没有被正确处理,导致出现了垂直偏移的问题。
解决方法是在创建标题TextView后,移除其padding属性。这样可以确保标题文本在AlertDialog中垂直居中显示。
以下是修改后的代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
TextView title_txt = new TextView(this);
title_txt.setGravity(Gravity.CENTER_HORIZONTAL);
title_txt.setText("Hello");
title_txt.setTextSize(16);
title_txt.setPadding(0, 0, 0, 0); // 移除padding属性
builder.setCustomTitle(title_txt);
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
builder.show();
通过移除标题TextView的padding属性,可以确保标题文本在AlertDialog中垂直居中显示。这样就解决了标题没有垂直居中显示的问题。
问题:AlertDialog中的标题无法垂直居中显示。
解决方法:
1. 尝试将标题的gravity设置为'center',并去除padding等属性。
2. 这样可以水平居中标题,但是垂直仍然无法居中。
3. 尝试将gravity属性值设置为center_horizontal|center_vertical。
4. 尽管已经设置了上述属性,但仍然无法实现标题的垂直居中。
5. 将根布局设置为RelativeLayout,在其中添加一个宽度和高度为wrap_content的LinearLayout。LinearLayout中包含图标和TextView。给LinearLayout添加layout_centerInParent属性,并将其设置为true。
6. 尽管已经尝试了上述方法,但标题仍然无法垂直居中。感谢你的努力。
问题的出现原因:
在AlertDialog中,设置的标题无法垂直居中显示。
解决方法:
通过创建一个自定义的XML布局来替换使用.setMessage()方法来设置消息的TextView。
具体的解决方法如下:
1. 创建一个XML布局文件,包含如下内容:
2. 在Java代码中,使用自定义的布局文件来创建AlertDialog:
public class HelpDialog extends DialogFragment{ // Bundle variables/args final static String ARG_HELP = "help"; public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.custom_help_title, null); Bundle args = getArguments(); builder.setView(view); TextView message = (TextView) view.findViewById(R.id.message); message.setMovementMethod(ScrollingMovementMethod.getInstance()); message.setText(args.getCharSequence(ARG_HELP)); builder.setPositiveButton("Done", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dismiss(); } }); return builder.create(); } }
3. 为了实现较大消息的滚动效果,使用了这里提供的解决方案。
通过上述的代码,问题得到了解决。