Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何自定义对话框的标题部分_Android_Dialog_Android Alertdialog - Fatal编程技术网

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;
    }


}