自定义 DialogFragment

问题描述 投票:0回答:1

第一张图就是我想要的。第二个是我得到的

我有这个类来创建一个对话框

import android.app.AlertDialog;
import android.app.Application;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.Toast;

public class AlertFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
                // Set Dialog Icon
                .setIcon(R.drawable.androidhappy)
                // Set Dialog Title
                .setTitle("Alert DialogFragment")
                // Set Dialog Message
                .setMessage("Alert DialogFragment Tutorial")

                // Positive button
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                })

                // Negative Button
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // Do something else
                    }
                }).create();
    }
}

在我看来

import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.app.ProgressDialog;

import android.content.DialogInterface;

import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonObjectRequest;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

.......

final FragmentManager fm = getSupportFragmentManager();

.......

AlertFragment alertdFragment = new AlertFragment();
// Show Alert DialogFragment
alertdFragment.setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialogFragmentStyle);
alertdFragment.show(fm, "Alert Dialog Fragment");

这是我的样式文件

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="android:spinnerItemStyle">
            @style/spinnerItemStyle
        </item>

        <!-- For each individual Spinner list item once clicked on -->
        <item name="android:spinnerDropDownItemStyle">
            @style/spinnerDropDownItemStyle
        </item>

    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

    <style name="spinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner">
        <item name="android:padding">0dp</item>
        <item name="android:textSize">@dimen/fld_txt_size</item>
    </style>

    <style name="spinnerDropDownItemStyle">
        <item name="android:padding">0dp</item>
        <item name="android:textSize">@dimen/fld_txt_size</item>
    </style>

    <style name="AppTheme.Button" parent="Widget.AppCompat.Button.Colored">
        <item name="android:textColor">@color/btn_text</item>
    </style>

    <style name="MyDialogFragmentStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="windowActionBar">true</item>
        <item name="windowNoTitle">false</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowNoTitle">false</item>
        <item name="android:headerDividersEnabled">true</item>
    </style>


</resources>

我把所有的样式都贴出来看看有没有问题。不管我想要对话框标题和正文之间的分隔符,我不明白为什么按钮不出现。

编辑:

我读过这篇文章

AlertDialog 上缺少按钮 |安卓 7.0 (Nexus 5x)

我意识到我需要为我的对话框定义一种样式。

事实上如果我设置这个

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">true</item>
    <item name="windowNoTitle">false</item>
    <item name="android:buttonBarStyle">@style/Widget.AppCompat.ActionButton</item>
</style>

然后以这种方式初始化对话框

AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this,R.style.dialog_theme);

我可以看到颜色和文字的变化。但是哪个属性可以显示标题、分隔符和按钮呢?

android android-dialogfragment
1个回答
0
投票

如果您想要自定义布局。您需要创建一个 Dialog 的实例。即对话框对话框=新对话框;并设置该对话框的内容视图:dialog.setContentView(R.layout.my_customized_dialog_layout); 然后,您可以在该布局内创建按钮并初始化它们。

© www.soinside.com 2019 - 2024. All rights reserved.