Android 如何自定义对话框的标题部分
我已经创建了一个定制的Android 如何自定义对话框的标题部分,android,dialog,android-alertdialog,Android,Dialog,Android Alertdialog,我已经创建了一个定制的对话框,并将布局xml应用于它。但是布局始终应用于对话框的主体,而从不应用于标题部分。我所能做的就是使用setTitle以编程方式设置dilaog的标题,并使用setFeatureDrawableResource添加一个图标。请告诉我如何自定义自定义对话框的标题部分 旁白:今天当我访问我的stackoverflow帐户时,我发现有200多分被扣掉了?知道为什么吗 Java_代码: reportDialog = new Dialog(MeetingPointFix.this)
对话框
,并将布局xml
应用于它。但是布局
始终应用于对话框的主体
,而从不应用于标题部分。我所能做的就是使用setTitle
以编程方式设置dilaog
的标题,并使用setFeatureDrawableResource
添加一个图标。请告诉我如何自定义自定义对话框的标题部分
旁白:今天当我访问我的stackoverflow帐户时,我发现有200多分被扣掉了?知道为什么吗
Java_代码:
reportDialog = new Dialog(MeetingPointFix.this);
reportDialog.requestWindowFeature(Window.FEATURE_LEFT_ICON);
reportDialog.setCancelable(false);
LayoutInflater reportAlertDialogLayoutInflater = LayoutInflater.from(getApplicationContext());
View reportAlertDialogInflatedView = reportAlertDialogLayoutInflater.inflate(R.layout.meetingpointfix_report_dialog, null);
reportDialog.setContentView(reportAlertDialogInflatedView);
int [] viewsRefsIds = {R.id.reportLocNameValue, R.id.reportLocLatValue, R.id.reportLocLngValue, R.id.reportTimeValue,
R.id.reportDateValue, R.id.reportImgTitleValue, R.id.reportImgPathValue
};
reportDialog.setTitle(REPORT_ALERT_DIALOG_TITLE);
reportDialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.reporticon01);
TextView reportDialogMSG = (TextView) reportDialog.findViewById(R.id.reportDialogMessageValue);
Button reportOkBtn = (Button) reportDialog.findViewById(R.id.reportOkBtnID);
Button reportNavigateBtn = (Button) reportDialog.findViewById(R.id.reportNavigateBtnID);
要完全自定义对话框,最好是扩展它并创建一个自定义对话框 这将给你所有你需要的自由,但当然你必须做更多的工作
public class MyDialog extends Dialog {
public MyDialog(Context context) {
super(context, android.R.style.Theme_Black_NoTitleBar);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setCanceledOnTouchOutside(false);
setContentView(R.layout.my_dialog_layout);
TextView title = (TextView) findViewById(R.id.my_dialog_title);
title.setText(context.getString(R.string.my_dialog_title_text));
findViewById(R.id.error_dialog_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something
MyDialog.this.dismiss();
}
});
findViewById(R.id.success_dialog_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something
MyDialog.this.dismiss();
}
});
}
}
试试这个,这肯定会解决你的问题
AlertDialog.Builder builder = new AlertDialog.Builder(MeetingPointFix.this);
builder.setCancelable(false);
LayoutInflater reportAlertDialogLayoutInflater = LayoutInflater.from(getApplicationContext());
View reportAlertDialogInflatedView = reportAlertDialogLayoutInflater.inflate(R.layout.meetingpointfix_report_dialog, null);
builder.setView(reportAlertDialogInflatedView);
int [] viewsRefsIds = {R.id.reportLocNameValue, R.id.reportLocLatValue, R.id.reportLocLngValue, R.id.reportTimeValue,
R.id.reportDateValue, R.id.reportImgTitleValue, R.id.reportImgPathValue
};
builder.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.reporticon01);
TextView reportDialogMSG = (TextView) reportDialog.findViewById(R.id.reportDialogMessageValue);
Button reportOkBtn = (Button) reportDialog.findViewById(R.id.reportOkBtnID);
Button reportNavigateBtn = (Button) reportDialog.findViewById(R.id.reportNavigateBtnID);
reportDialog=builder.create();
将以下内容添加到样式xml文件中:
<style name="FullHeightDialog" parent="android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
您需要为此创建自定义AlertDialog:
public class CustomAlertDialogBuilder extends AlertDialog.Builder {
private final Context mContext;
private TextView mTitle;
private ImageView mIcon;
private TextView mMessage;
public CustomAlertDialogBuilder(Context context) {
super(context);
mContext = context;
View customTitle = View.inflate(mContext, R.layout.dialog_title, null);
mTitle = (TextView) customTitle.findViewById(R.id.alertTitle);
mIcon = (ImageView) customTitle.findViewById(R.id.icon);
setCustomTitle(customTitle);
}
@Override
public CustomAlertDialogBuilder setTitle(int textResId) {
mTitle.setText(textResId);
return this;
}
@Override
public CustomAlertDialogBuilder setTitle(CharSequence text) {
mTitle.setText(text);
return this;
}
@Override
public CustomAlertDialogBuilder setIcon(int drawableResId) {
mIcon.setImageResource(drawableResId);
return this;
}
@Override
public CustomAlertDialogBuilder setIcon(Drawable icon) {
mIcon.setImageDrawable(icon);
return this;
}
}
您还需要自定义布局:
res/layout/dialog_title.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="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/title_template"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginTop="6dip"
android:layout_marginBottom="9dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingTop="6dip"
android:paddingRight="10dip"
android:src="@drawable/ic_dialog_alert" />
<TextView
android:id="@+id/alertTitle"
style="@style/?android:attr/textAppearanceLarge"
android:singleLine="true"
android:ellipsize="end"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView android:id="@+id/titleDivider"
android:layout_width="fill_parent"
android:layout_height="1dip"
android:scaleType="fitXY"
android:gravity="fill_horizontal"
android:src="@drawable/divider_horizontal_bright" />
</LinearLayout>
希望这有帮助
您可以在此处找到更多信息:
仅供参考,您的StackOverflow帐户是在24小时前创建的,因此看起来您创建了一个新帐户,而不是访问原始帐户。最简单的方法是使用此帐户。我在这篇文章中阅读了其他答案,并想在代码中添加一个类似于他们的答案。您可以在布局文件本身中提供自定义标题栏。请参阅此代码:
public void createDialogLanguage() {
ListView listViewLanguage;
final Dialog dialog = new Dialog(getActivity());
dialog.getWindow().addFlags(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawableResource(
android.R.color.transparent);
dialog.setContentView(R.layout.dialog_language);
dialog.show();
}
请注意这一行:
dialog.getWindow().setBackgroundDrawableResource(
android.R.color.transparent);
这将使对话框边框和标题栏透明。如果要将自定义背景与边框(mycase:圆角)设置为适当显示,则此选项非常有用。没有可见的边缘。是的,我同意默认对话框标题有时与应用程序的主题样式不匹配 幸运的是,android为您提供了一种更新标题布局的方法,您只需在创建对话框时处理这三行代码即可
dialog.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
dialog.setContentView(R.layout.test);
dialog.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.dialog_title_test);
确保对setContentView()的调用发生在requestWindowFeature()之后和setFetureInt()之前
因此,假设对于一个对话框片段,您可以这样做
public class DialogTest extends DialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
dialog.setContentView(R.layout.test);
dialog.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.dialog_title_test);
return dialog;
}
}
快乐编码!:) 你能分享代码吗?你想在你的标题中定制什么。请准确。您可以使用样式从对话框中删除标题,然后在布局中根据需要进行设置。xml:true@WasimAhmed确实等等shortly@WasimAhmed请看邮政编码谢谢你的回答。但是我认为你发布的代码没有自定义标题部分?是吗?这取决于你的布局!您可以根据需要构建my_dialog_layout.xml,以便添加标题、图像和所有内容。这是完全自定义对话框的最佳(也是唯一)方法。:)请告诉我如何将样式xml设置为我的布局在项目-->res文件夹-->值文件夹-->styles.xml文件中添加FullHeightDialog样式片段。创建对话框时,使用:final dialog dialog=newdialog(YourActivty.this,R.style.FullHeightDialog);setContentView(R.layout.your_dialog_layout);。谢谢你的回答,你介意投票表决我的问题吗?很乐意帮忙,当然谢谢你的回答。但在我看来,您发布的代码与我发布的代码没有什么不同,这无助于自定义标题部分Now check..它将彻底解决您的问题..我已经测试了它及其工作。。您所要做的就是完全定制xml布局,包括标题Bart感谢您的回答,您介意投票表决我的问题吗?谢谢您的回答,您介意投票表决我的问题吗?我很乐意回答,是的,我肯定会投票表决:)。
public class DialogTest extends DialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
dialog.setContentView(R.layout.test);
dialog.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.dialog_title_test);
return dialog;
}
}