【问题标题】:Customizing a DialogFragment自定义 DialogFragment
【发布时间】:2017-04-26 20:17:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-dialogfragment


    【解决方案1】:

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

    【讨论】:

    • 我遵循了这个教程androidbegin.com/tutorial/android-dialogfragment-tutorial,他没有使用 setContentView。
    • 你的 alertdragment 在哪里?您按照第一个(左图)的示例而不是右图的示例,这是 alertdfragment 类的结果。
    • 我的 AlertFragment 是他的 AlertDFragment 类。事实上,我可以看到图标。
    • 你的 activity_main.xml 文件在哪里?
    • 你的主要活动是什么?您需要在 mainactivity 中扩展 activity_main.xml 文件才能显示这些按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多