自定义DialogFragment

时间:2017-04-26 20:17:27

标签: android android-dialogfragment

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

enter image description here

我在这个课程中创​​建了一个对话框

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>

我发布了所有样式,看看是否有任何问题。无论我想要对话框的标题和正文之间的分隔符,我都不明白为什么按钮不会出现。

编辑:

我读了这个

Missing buttons on AlertDialog | Android 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);

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

1 个答案:

答案 0 :(得分:0)

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