Dialog(2)

利用android-styled-dialogs-master 设置dialog


网址:  https://github.com/avast/android-styled-dialogs


如何使用该库来创建自己的对话框,注意点有以下几点:

    1.自己的项目必须依赖android-styled-dialogs-lib项目,仅仅导入lib项目生成的jar包是会运行报错的。

    2.如果要修改theme,则须拷贝demo项目中的color.xml和theme.xml到本项目中的res/values目录下

其他就可以参考demo项目了。创建对话框非常简单,若要响应对话框则须继承ISimpleDialogListener接口和ISimpleDialogCancelListener接口并实现响应的方法,注意给每个对话框一个requestCode,这样在方法中就可以区分点击是来自哪个对话框。


下载工程运行demo:

/*
 * Copyright 2013 Inmite s.r.o. (www.inmite.eu).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.avast.dialogs;

import java.text.DateFormat;
import java.util.Date;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.content.res.TypedArray;
import android.util.TypedValue;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.Toast;

import com.avast.android.dialogs.fragment.DatePickerDialogFragment;
import com.avast.android.dialogs.fragment.ListDialogFragment;
import com.avast.android.dialogs.fragment.ProgressDialogFragment;
import com.avast.android.dialogs.fragment.SimpleDialogFragment;
import com.avast.android.dialogs.fragment.TimePickerDialogFragment;
import com.avast.android.dialogs.iface.IDateDialogListener;
import com.avast.android.dialogs.iface.IListDialogListener;
import com.avast.android.dialogs.iface.IMultiChoiceListDialogListener;
import com.avast.android.dialogs.iface.ISimpleDialogCancelListener;
import com.avast.android.dialogs.iface.ISimpleDialogListener;

public class DemoActivity extends ActionBarActivity implements
        ISimpleDialogListener,
        IDateDialogListener,
        ISimpleDialogCancelListener,
        IListDialogListener,
        IMultiChoiceListDialogListener {

    private static final int REQUEST_PROGRESS = 1;  //自定义用来区分不同Dialog标识符,使用方法看代码
    private static final int REQUEST_LIST_SIMPLE = 9;
    private static final int REQUEST_LIST_MULTIPLE = 10;
    private static final int REQUEST_LIST_SINGLE = 11;
    private static final int REQUEST_DATE_PICKER = 12;
    private static final int REQUEST_TIME_PICKER = 13;
    private static final int REQUEST_SIMPLE_DIALOG = 42;

    DemoActivity c = this;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setIcon(R.drawable.img_avast_logo_small);
        //第一个Dialog
        findViewById(R.id.message_dialog).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SimpleDialogFragment.createBuilder(c, getSupportFragmentManager())
                        .setMessage("Love. Can know all the math in the \'verse but take a boat in the air that you don\'t " +
                                "love? She\'ll shake you off just as sure as a turn in the worlds. Love keeps her in the air when " +
                                "she oughtta fall down...tell you she\'s hurtin\' \'fore she keens...makes her a home.").show();
            }
        });
        findViewById(R.id.message_title_dialog).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SimpleDialogFragment.createBuilder(c, getSupportFragmentManager())
                        .setTitle("More Firefly quotes:").setMessage
                        ("Wash: \"Psychic, though? That sounds like something out of science fiction.\"\n\nZoe: \"We live" +
                                " " +
                                "in a space ship, dear.\"\nWash: \"Here lies my beloved Zoe, " +
                                ("my autumn flower ... somewhat less attractive now that she's all corpsified and gross" +
                                        ".\"\n\nRiver Tam: \"Also? I can kill you with my brain.\"\n\nKayle: \"Going on a year now, nothins twixed my neathers not run on batteries.\" \n" +
                                        "Mal: \"I can't know that.\" \n" +
                                        "Jayne: \"I can stand to hear a little more.\"\n\nWash: \"I've been under fire before. " +
                                        "Well ... I've been in a fire. Actually, I was fired. I can handle myself.\""))
                        .setNegativeButtonText("Close")
                        .show();
            }
        });
        findViewById(R.id.message_title_buttons_dialog)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        SimpleDialogFragment.createBuilder(c, getSupportFragmentManager())
                                .setTitle("Do you like this quote?")
                                .setMessage("Jayne: \"Shiny. Let's be bad guys.\"")
                                .setPositiveButtonText("Love")
                                .setNegativeButtonText("Hate")
                                .setNeutralButtonText("WTF?")
                                .setRequestCode(REQUEST_SIMPLE_DIALOG)
                                .show();
                    }
                });
        findViewById(R.id.long_buttons).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SimpleDialogFragment.createBuilder(c, getSupportFragmentManager()).setMessage("How will you decide?")
                        .setPositiveButtonText("Time for some thrillin' heroics!").setNegativeButtonText("Misbehave")
                        .setNeutralButtonText("Keep flying").show();
            }
        });
        //显示一个进度条 
       findViewById(R.id.progress_dialog).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ProgressDialogFragment.createBuilder(c, getSupportFragmentManager())
                        .setMessage("Mal: I\'m just waiting to see if I pass out. Long story.")
                        .setRequestCode(REQUEST_PROGRESS)
                        .show();
            }
        });
        findViewById(R.id.list_dialog_simple).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ListDialogFragment
                        .createBuilder(c, getSupportFragmentManager())
                        .setTitle("Your favorite character:")
                        .setItems(new String[]{"Jayne", "Malcolm", "Kaylee",
                                "Wash", "Zoe", "River"})
                        .setRequestCode(REQUEST_LIST_SIMPLE)
                        .show();

            }
        });
        findViewById(R.id.list_dialog_single).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ListDialogFragment
                        .createBuilder(c, getSupportFragmentManager())
                        .setTitle("Your favorite character:")
                        .setItems(new String[]{"Jayne", "Malcolm", "Kaylee",
                                "Wash", "Zoe", "River"})
                        .setRequestCode(REQUEST_LIST_SINGLE)
                        .setChoiceMode(AbsListView.CHOICE_MODE_SINGLE)
                        .show();

            }
        });
        //包含多个选项的一个Dialog
       findViewById(R.id.list_dialog_multiple).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ListDialogFragment
                        .createBuilder(c, getSupportFragmentManager())
                        .setTitle("Your favorite character:")
                        .setItems(new String[]{"Jayne", "Malcolm", "Kaylee",
                                "Wash", "Zoe", "River"})//包含的选项
                        .setRequestCode(REQUEST_LIST_MULTIPLE) //如果有多个CHOICE_MODE_MULTIPLE类型的Dialog,用这个标志区分。
                        .setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE)//指明这是个可多个选择的Dialog。
                        .setCheckedItems(new int[]{1, 3})
                        .show();

            }
        });
        findViewById(R.id.custom_dialog).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                JayneHatDialogFragment.show(c);
            }
        });
        findViewById(R.id.time_picker).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TimePickerDialogFragment
                        .createBuilder(DemoActivity.this, getSupportFragmentManager())
                        .setDate(new Date())
                        .setPositiveButtonText(android.R.string.ok)
                        .setNegativeButtonText(android.R.string.cancel)
                        .setRequestCode(REQUEST_TIME_PICKER)
                        .show();
            }
        });
        findViewById(R.id.date_picker).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatePickerDialogFragment
                        .createBuilder(DemoActivity.this, getSupportFragmentManager())
                        .setDate(new Date())
                        .setPositiveButtonText(android.R.string.ok)
                        .setNegativeButtonText(android.R.string.cancel)
                        .setRequestCode(REQUEST_DATE_PICKER)
                        .show();
            }
        });
    }

    // IListDialogListener

    @Override
    public void onListItemSelected(CharSequence value, int number, int requestCode) {
        if (requestCode == REQUEST_LIST_SIMPLE || requestCode == REQUEST_LIST_SINGLE) {
            Toast.makeText(c, "Selected: " + value, Toast.LENGTH_SHORT).show();
        }
    }

    @Override    //此类方法用来响应CHOICE_MODE_MULTIPLE类型的Dialog选择后的操作,其中REQUEST_LIST_MULTIPLE指明哪个Dialog。传参values为选择的选项。
    public void onListItemsSelected(CharSequence[] values, int[] selectedPositions, int requestCode) {
        if (requestCode == REQUEST_LIST_MULTIPLE) {
            StringBuilder sb = new StringBuilder();
            for (CharSequence value : values) {
                if (sb.length() > 0) {
                    sb.append(", ");
                }
                sb.append(value);

            }
            Toast.makeText(c, "Selected: " + sb.toString(), Toast.LENGTH_SHORT).show();
        }
    }

    // ISimpleDialogCancelListener

    @Override  //Dialog的 cancel操作:
    public void onCancelled(int requestCode) {
        switch (requestCode) {
            case REQUEST_SIMPLE_DIALOG:
                Toast.makeText(c, "Dialog cancelled", Toast.LENGTH_SHORT).show();
                break;
            case REQUEST_PROGRESS:
                Toast.makeText(c, "Progress dialog cancelled", Toast.LENGTH_SHORT).show();
                break;
            case REQUEST_LIST_SIMPLE:
            case REQUEST_LIST_SINGLE:
            case REQUEST_LIST_MULTIPLE:
                Toast.makeText(c, "Nothing selected", Toast.LENGTH_SHORT).show();
                break;
            case REQUEST_DATE_PICKER:
                Toast.makeText(c, "Date picker cancelled", Toast.LENGTH_SHORT).show();
                break;
            case REQUEST_TIME_PICKER:
                Toast.makeText(c, "Time picker cancelled", Toast.LENGTH_SHORT).show();
                break;
        }
    }

    // ISimpleDialogListener  选择对话框操作。

    @Override
    public void onPositiveButtonClicked(int requestCode) {
        if (requestCode == REQUEST_SIMPLE_DIALOG) {
            Toast.makeText(c, "Positive button clicked", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onNegativeButtonClicked(int requestCode) {
        if (requestCode == REQUEST_SIMPLE_DIALOG) {
            Toast.makeText(c, "Negative button clicked", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onNeutralButtonClicked(int requestCode) {
        if (requestCode == REQUEST_SIMPLE_DIALOG) {
            Toast.makeText(c, "Neutral button clicked", Toast.LENGTH_SHORT).show();
        }
    }

    // IDateDialogListener

    @Override
    public void onNegativeButtonClicked(int resultCode, Date date) {
        String text = "";
        if (resultCode == REQUEST_DATE_PICKER) {  //yes or cancel -> cancel
            text = "Date ";
        } else if (resultCode == REQUEST_TIME_PICKER) { //no
            text = "Time ";
        }

        DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);
        Toast.makeText(this, text + "Cancelled " + dateFormat.format(date), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPositiveButtonClicked(int resultCode, Date date) {
        String text = "";
        if (resultCode == REQUEST_DATE_PICKER) {  //yes or cancel -> yes
            text = "Date ";
        } else if (resultCode == REQUEST_TIME_PICKER) { //now time
            text = "Time ";
        }

        DateFormat dateFormat = DateFormat.getDateTimeInstance();
        Toast.makeText(this, text + "Success! " + dateFormat.format(date), Toast.LENGTH_SHORT).show();
    }

    // menu

    @Override
    public boolean onCreateOptionsMenu(Menu menu) { //创建Options菜单栏内容
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu); //main.xml

        if (isDarkTheme()) {
            menu.findItem(R.id.theme_change).setTitle("Use Light Theme");//亮
        }
        else {
            menu.findItem(R.id.theme_change).setTitle("Use Dark Theme");//点开Dialog后,背景为暗
        }
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {//响应菜单栏操作
        switch (item.getItemId()) {
            case R.id.theme_change: //如果点击了这个控件:
                if (isDarkTheme()) {
                    setTheme(R.style.AppTheme);
                    Toast.makeText(DemoActivity.this, "Light theme set", Toast.LENGTH_SHORT).show();
                } else {
                    setTheme(R.style.AppThemeDark);//setTheme:API函数  , R.style.AppThemeDark:type.xml中定义的。
                    Toast.makeText(DemoActivity.this, "Dark theme set", Toast.LENGTH_SHORT).show();
                }
                supportInvalidateOptionsMenu();
                return true;
            case R.id.about:
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse("https://github.com/avast/android-styled-dialogs"));
                startActivity(i);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private boolean isDarkTheme() {
        boolean darkTheme = false;
        //Try-catch block is used to overcome resource not found exception
        try {
            TypedValue val = new TypedValue();

            //Reading attr value from current theme
            getTheme().resolveAttribute(com.avast.android.dialogs.R.attr.isLightTheme, val, true);

            //Passing the resource ID to TypedArray to get the attribute value
            TypedArray arr = obtainStyledAttributes(val.data, new int[]{com.avast.android.dialogs.R.attr.isLightTheme});
            darkTheme = !arr.getBoolean(0, false);
            arr.recycle();
        } catch (RuntimeException e) {
            //Resource not found , so sticking to light theme
            darkTheme = false;
        }
        return darkTheme;
    }

}


效果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值