标题未在 AlertDialog 上垂直居中
Title not center vertically on AlertDialog
我有一个 AlertDialog
标题,当对话框的消息内容不需要滚动时,它会垂直居中,如下所示:
现在,当需要滚动消息内容时,标题不再垂直居中,如下所示:
我最初尝试使用以下方法设置标题和图标:
builder.setTitle("Help");
builder.setIcon(R.drawable.help);
并且上面代码中第二种情况标题不居中。从那以后,我尝试将标题切换到 XML 布局并使用 builder.setCustomTitle(...);
设置标题,并使用以下内容 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minHeight="72dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingLeft="14dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/help"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Help"
android:textSize="24sp"
android:textColor="#ff33b5e5"/>
</LinearLayout>
我已经尝试了 minHeight
、gravity
、layout_gravity
和 padding
属性。我已经能够使用 padding
属性在第二种情况下将标题居中,但第一种情况下的标题不再居中。虽然 padding
可行,但我想找到一种解决方案,使标题在每种情况下都居中,而不管消息是否需要滚动。我觉得我忽略了一些简单 and/or 直截了当的东西。
此外,消息内容仅使用builder.setMessage();
设置。
编辑 1: 我应该澄清一下,我不希望标题水平居中,只希望它垂直左对齐加上 margin/padding。最后,我希望每个标题栏都像上面的第一张图片一样出现。
编辑 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();
}
}
您是否尝试过将重力设置为 'center'?摆脱填充等
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);
builder.setCustomTitle(title_txt);
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
builder.show();
所以我最终用包含消息 TextView
的更自定义的 XML 布局解决了这个问题,而不是使用 .setMessage()
.
XML 结果是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:src="@drawable/help"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="Help"
android:textSize="24sp"
android:textColor="#ff33b5e5"/>
</LinearLayout>
<View android:id="@+id/titleDivider"
android:layout_width="match_parent"
android:layout_height="2dip"
android:background="#ff33b5e5" />
<TextView
android:id="@+id/message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxLines="16"
android:minLines="3"
android:scrollbars="vertical"
android:fadeScrollbars="false"
android:textSize="20sp"
android:padding="7dp"/>
</LinearLayout>
而 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();
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();
}
}
为了使较大消息的滚动功能正常运行,使用了 here 中的解决方案。
这段代码给了我以下结果:
我有一个 AlertDialog
标题,当对话框的消息内容不需要滚动时,它会垂直居中,如下所示:
现在,当需要滚动消息内容时,标题不再垂直居中,如下所示:
我最初尝试使用以下方法设置标题和图标:
builder.setTitle("Help");
builder.setIcon(R.drawable.help);
并且上面代码中第二种情况标题不居中。从那以后,我尝试将标题切换到 XML 布局并使用 builder.setCustomTitle(...);
设置标题,并使用以下内容 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minHeight="72dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingLeft="14dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/help"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Help"
android:textSize="24sp"
android:textColor="#ff33b5e5"/>
</LinearLayout>
我已经尝试了 minHeight
、gravity
、layout_gravity
和 padding
属性。我已经能够使用 padding
属性在第二种情况下将标题居中,但第一种情况下的标题不再居中。虽然 padding
可行,但我想找到一种解决方案,使标题在每种情况下都居中,而不管消息是否需要滚动。我觉得我忽略了一些简单 and/or 直截了当的东西。
此外,消息内容仅使用builder.setMessage();
设置。
编辑 1: 我应该澄清一下,我不希望标题水平居中,只希望它垂直左对齐加上 margin/padding。最后,我希望每个标题栏都像上面的第一张图片一样出现。
编辑 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();
}
}
您是否尝试过将重力设置为 'center'?摆脱填充等
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);
builder.setCustomTitle(title_txt);
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
});
builder.show();
所以我最终用包含消息 TextView
的更自定义的 XML 布局解决了这个问题,而不是使用 .setMessage()
.
XML 结果是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:src="@drawable/help"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="Help"
android:textSize="24sp"
android:textColor="#ff33b5e5"/>
</LinearLayout>
<View android:id="@+id/titleDivider"
android:layout_width="match_parent"
android:layout_height="2dip"
android:background="#ff33b5e5" />
<TextView
android:id="@+id/message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:maxLines="16"
android:minLines="3"
android:scrollbars="vertical"
android:fadeScrollbars="false"
android:textSize="20sp"
android:padding="7dp"/>
</LinearLayout>
而 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();
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();
}
}
为了使较大消息的滚动功能正常运行,使用了 here 中的解决方案。
这段代码给了我以下结果: