您的位置:首页 > 其它

吐槽Dialog的实现

2017-06-08 21:44 169 查看
如示意图:



这样的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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息