吐槽Dialog的实现
2017-06-08 21:44
169 查看
如示意图:
这样的Dialog写了很多遍了,自定义一下就ok了!正常情况点击点个赞,鼓励一下,如果有下第三方的应用市场软件,就会直接跳转进去(此示意图是在模拟器上运行,无法安装应用市场软件,望见谅)
第一步:实现自定义Dialog
第二步:Dialog的布局
第三步:主体代码
最后一步:开启应用市场评分(或者在应用市场搜索该应用)
以及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>
相关文章推荐
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 使用Ext中的Grid,Form,Dialog来实现列表,创建,更新,删除,查找和分页功能
- 用MFC实现WebGUI--(CDHtmlDialog)
- 在Dialog中创建一个htmlview(CHtmlView类)区,实现浏览网页
- EXTJS FILE UploadDialog用JAVA实现例子
- 基于MIDP实现Dialog组件
- 用MFC实现WebGUI--(CDHtmlDialog)
- 使用Ext的Grid,Form,Dialog来实现分页列表,创建,修改,删除功能
- 如何可以用openFileDialog实现打开txt文档并显示到文档中的内容
- C#中代码Dialog控件实现(打开,保存,改变字体,颜色,打印功能)
- ATL实现的CDHtmlDialog模板类
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 基于MIDP实现Dialog组件
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)
- 在VS2005中设置DIALOG的属性,将滚动条属性设置为TRUE,这样在界面中出现滚动条样式,但不能实现滚动
- FolderBrowserDialog实现默认选中上次选择的目录