吐槽Dialog的实现

如示意图:
这里写图片描述

这样的Dialog写了很多遍了,自定义一下就ok了!正常情况点击点个赞,鼓励一下,如果有下第三方的应用市场软件,就会直接跳转进去(此示意图是在模拟器上运行,无法安装应用市场软件,望见谅)

第一步:实现自定义Dialog

/**
 * 吐槽反馈Dialog
 */
public final class EvaluateDialog extends Dialog {

    private Button mStoreBtn;
    private Button mFeedbackBtn;
    private Button mCancelBtn;
    private OnStoreListener mOnStoreListener;
    private OnFeedbackListener mOnFeedbackListener;
    private OnCancelListener mOnCancelListener;

    public EvaluateDialog(Context context) {
        //设置Dialog的样式
        super(context,R.style.EvaluateDialog);
    }

    public EvaluateDialog(Context context, int theme) {
        super(context,theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_evaluate);
        initData();
        initView();
    }

    private void initData() {
        setCancelable(true);  // 设置当返回键按下是否关闭对话框
        setCanceledOnTouchOutside(false);  // 设置当点击对话框以外区域是否关闭对话框
    }

    private void initView() {
        mStoreBtn = (Button) findViewById(R.id.goto_store_btn);
        mFeedbackBtn = (Button) findViewById(R.id.goto_feedback_btn);
        mCancelBtn = (Button) findViewById(R.id.cancel_btn);

        //赞美
        mStoreBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnStoreListener != null) {
                    mOnStoreListener.onStore(v);
                    dismiss();
                }
            }
        });
        //不中意
        mFeedbackBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if ( mOnFeedbackListener != null) {
                    mOnFeedbackListener.onFeedback(v);
                    dismiss();
                }
            }
        });
        //取消
        mCancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnCancelListener != null) {
                    mOnCancelListener.onCancel(v);
                    dismiss();
                }
            }
        });
    }

    public OnStoreListener getOnStoreListener() {
        return mOnStoreListener;
    }

    public void setOnStoreListener(OnStoreListener onStoreListener) {
        this.mOnStoreListener = onStoreListener;
    }

    public OnFeedbackListener getOnFeedbackListener() {
        return mOnFeedbackListener;
    }

    public void setOnFeedbackListener(OnFeedbackListener onFeedbackListener) {
        this.mOnFeedbackListener = onFeedbackListener;
    }

    public OnCancelListener getOnCancelListener() {
        return mOnCancelListener;
    }

    public void setOnCancelListener(OnCancelListener onCancelListener) {
        this.mOnCancelListener = onCancelListener;
    }

    //定义三个回调接口
    public interface OnStoreListener {
        public void onStore(View v);
    }

    public interface OnFeedbackListener {
        public void onFeedback(View v);
    }

    public interface OnCancelListener {
        public void onCancel(View v);
    }
}

第二步:Dialog的布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="320.0dip"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/shape_bg_dialog"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="36.0dip"
        android:gravity="center_horizontal"
        android:text="您的支持,是我们不断进步的动力"
        android:textColor="@color/black_common"
        android:textSize="@dimen/common_font_size_small" />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:paddingBottom="28.0dip"
        android:paddingTop="28.0dip">
        <Button
            android:id="@+id/goto_store_btn"
            android:layout_width="fill_parent"
            android:layout_height="45.0dip"
            android:layout_marginLeft="@dimen/common_view_largest_margin"
            android:layout_marginRight="@dimen/common_view_largest_margin"
            android:background="@drawable/selector_redbtn"
            android:text="点个赞,鼓励一下"
            android:textColor="@color/white"
            android:textSize="@dimen/common_font_size_middle" />
        <Button
            android:id="@+id/goto_feedback_btn"
            android:layout_width="fill_parent"
            android:layout_height="45.0dip"
            android:layout_marginLeft="@dimen/common_view_largest_margin"
            android:layout_marginRight="@dimen/common_view_largest_margin"
            android:layout_marginTop="18.0dip"
            android:background="@drawable/selector_whitebtn"
            android:text="不中意,我要吐槽"
            android:textColor="@color/red_pres"
            android:textSize="@dimen/common_font_size_middle" />
        <Button
            android:id="@+id/cancel_btn"
            android:layout_width="fill_parent"
            android:layout_height="45.0dip"
            android:layout_marginLeft="@dimen/common_view_largest_margin"
            android:layout_marginRight="@dimen/common_view_largest_margin"
            android:layout_marginTop="18.0dip"
            android:background="@drawable/selector_greybtn"
            android:text="算了,晚点再来评价"
            android:textColor="@color/gray_light4"
            android:textSize="@dimen/common_font_size_middle" />
    </LinearLayout>
</LinearLayout>

第三步:主体代码

final EvaluateDialog evaluateDialog = new EvaluateDialog(getActivity());
                evaluateDialog.setOnCancelListener(new EvaluateDialog.OnCancelListener() {
                    @Override
                    public void onCancel(View v) {

                    }
                });
                //跳转到应用市场去评分
                evaluateDialog.setOnStoreListener(new EvaluateDialog.OnStoreListener() {
                    @Override
                    public void onStore(View v) {
                        MarketUtils.searchAppByPkgName(getActivity(), TONG_BAN_JIE_PACKAGE_NAME);
                    }
                });
                //跳转到反馈界面
                evaluateDialog.setOnFeedbackListener(new EvaluateDialog.OnFeedbackListener() {
                    @Override
                    public void onFeedback(View v) {
                        FeedbackActivity.start(getActivity());
                    }
                });
                evaluateDialog.show();

最后一步:开启应用市场评分(或者在应用市场搜索该应用)

/**
 * 应用市场评分
 */
public class MarketUtils {
    private MarketUtils() {
    }

    /**
     * @param context
     * @param appPckName 应用包名
     */
    public static void searchAppByPkgName(Context context, String appPckName) {
        if (TextUtils.isEmpty(appPckName)) {
            return;
        }
        /*market://search?q=   表示在应用市场查找app
        market://details?id=   表示打开应用详情页*/
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse("market://details?id=" + appPckName));
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(context, "未找到相应的市场!", Toast.LENGTH_SHORT).show();
        }
    }
}

以及Dialog的样式

<style name="EvaluateDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <!-- 边框 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsTranslucent">false</item>
        <!-- 半透明 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 无标题 -->
        <item name="android:windowBackground">@color/transparent</item>
        <!-- 自己想要的背景 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 屏幕背景变暗 -->
    </style>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值