A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴光新 黑马帝   /  2013-8-14 19:27  /  1068 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自定义Alertdialog设置style ,避免在不同手机和平台之间的差异,可设置 Icon 、title、 message、
  view、positiButton 、negativeButton等,也可根据需要自行扩展
  1. /* dialog 实现类 */
  2. import com.android.R;
  3. import com.android.app.AlertDialogImpl.Builder.Parameters;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.support.v4.app.DialogFragment;
  7. import android.support.v4.app.FragmentActivity;
  8. import android.util.Log;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.view.ViewGroup;
  13. import android.widget.Button;
  14. import android.widget.FrameLayout;
  15. import android.widget.ImageView;
  16. import android.widget.LinearLayout;
  17. import android.widget.TextView;

  18. public class AlertDialogImpl extends DialogFragment{
  19.        
  20.         public static class Builder {
  21.                
  22.                 private FragmentActivity mActivity;
  23.                
  24.                 public Builder(FragmentActivity activity) {
  25.                         this.mActivity = activity;
  26.                 }
  27.                
  28.                 public Builder setIcon(int iconId) {
  29.                         Parameters.icon = iconId;
  30.                         return this;
  31.                 }
  32.                
  33.                 public Builder setTitle(String title) {
  34.                         Parameters.title = title;
  35.                         return this;
  36.                 }
  37.                
  38.                 public Builder setMessage(String message) {
  39.                         Parameters.message = message;
  40.                         return this;
  41.                 }
  42.                
  43.                 public Builder setView(View view) {
  44.                         Parameters.view = view;
  45.                         return this;
  46.                 }
  47.                 /* 注意此处监听为onclicklistener */
  48.                 public Builder setPositive(CharSequence chars, OnClickListener mpListener) {
  49.                         Parameters.possitiveChars = chars;
  50.                         Parameters.mpListener = mpListener;
  51.                         return this;
  52.                 }
  53.                
  54.                 public Builder setNegative(CharSequence chars, OnClickListener mnListener) {
  55.                         Parameters.negativeChars = chars;
  56.                         Parameters.mnListener = mnListener;
  57.                         return this;
  58.                 }
  59.                
  60.                 public AlertDialogImpl show() {
  61.                         AlertDialogImpl impl = new AlertDialogImpl();
  62.                         impl.show(mActivity.getSupportFragmentManager(), "DialogBuilder");
  63.                         return impl;
  64.                 }
  65.                
  66.                 public static class Parameters {
  67.                         static String title = "";
  68.                         static int icon = -1;
  69.                         static String message = "";
  70.                         static View view;
  71.                         static CharSequence possitiveChars = "", negativeChars = "";
  72.                         static OnClickListener mpListener, mnListener;
  73.                 }
  74.         }
  75.        
  76.         @Override
  77.         public void onAttach(Activity activity) {
  78.                 // TODO Auto-generated method stub
  79.                 super.onAttach(activity);
  80.                 Log.e("tag", "onattach");
  81.         }

  82.         @Override
  83.         public void onCreate(Bundle savedInstanceState) {
  84.                 // TODO Auto-generated method stub
  85.                 super.onCreate(savedInstanceState);
  86.                 Log.e("tag", "onCreate");
  87.                 setStyle(0, R.style.style_self_dialog_toast);
  88.         }


  89.         @Override
  90.         public View onCreateView(LayoutInflater inflater, ViewGroup container,
  91.                         Bundle savedInstanceState) {
  92.                 // TODO Auto-generated method stub
  93.                 Log.e("tag", "onCreateview");
  94.                
  95.                 View view = inflater.inflate(R.layout.alertdialog_view, container, false);
  96.                 ImageView icon = (ImageView)view.findViewById(R.id.dialog_icon);
  97.                 if(Parameters.icon == -1) {
  98.                         icon.setVisibility(View.GONE);
  99.                 }else {
  100.                         icon.setBackgroundResource(Parameters.icon);
  101.                 }
  102.                
  103.                
  104.                 TextView title = (TextView)view.findViewById(R.id.dialog_title);
  105.                 int visibility = Parameters.title == null || Parameters.title.equals("") ? View.GONE : View.VISIBLE;
  106.                 LinearLayout titlLinear = (LinearLayout)view.findViewById(R.id.dialog_title_linear);
  107.                 titlLinear.setVisibility(visibility);
  108.                 CharSequence charSequence = Parameters.title == null ? "" : Parameters.title;
  109.                 title.setText(charSequence);
  110.                
  111.                 TextView message = (TextView)view.findViewById(R.id.dialog_message);
  112.                 message.setText(Parameters.message);
  113.                
  114.                 FrameLayout mView = (FrameLayout)view.findViewById(R.id.dialog_middle_view);
  115.                 if(Parameters.view == null) {
  116.                         mView.setVisibility(View.GONE);
  117.                 }else {
  118.                         mView.addView(Parameters.view);
  119.                 }
  120.                
  121.                 Button btnPossitive = (Button)view.findViewById(R.id.dialog_sure);
  122.                 Button btnNegavite = (Button)view.findViewById(R.id.dialog_cancel);
  123.                        
  124.                 if(Parameters.mpListener == null) {
  125.                         btnPossitive.setVisibility(View.GONE);
  126.                 }else {
  127.                         btnPossitive.setText(Parameters.possitiveChars);
  128.                         btnPossitive.setOnClickListener(Parameters.mpListener);
  129.                 }
  130.                 if(Parameters.mnListener == null) {
  131.                         btnNegavite.setVisibility(View.GONE);
  132.                 }else {
  133.                         btnNegavite.setText(Parameters.negativeChars);
  134.                         btnNegavite.setOnClickListener(Parameters.mnListener);
  135.                 }
  136.                 if(Parameters.mpListener == null && Parameters.mnListener == null) {
  137.                         ((LinearLayout)view.findViewById(R.id.dialog_linear_bottom)).setVisibility(View.GONE);
  138.                 }
  139.                 return view;
  140.         }
  141. }

  142. /* dialog view布局 */
  143. <?xml version="1.0" encoding="utf-8"?>
  144. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  145.     android:layout_width="match_parent"
  146.     android:layout_height="match_parent"
  147.     android:orientation="vertical"
  148.     android:padding="5dp" >

  149.     <LinearLayout
  150.         android:id="@+id/dialog_title_linear"
  151.         android:layout_width="match_parent"
  152.         android:layout_height="50dp"
  153.         android:paddingLeft="10dp"
  154.         android:gravity="left|center_vertical"
  155.         android:orientation="horizontal"
  156.         android:background="@drawable/dialog_top_holo_light" >
  157.                 <ImageView
  158.                     android:id="@+id/dialog_icon"
  159.                     android:layout_width="45dp"
  160.                     android:layout_height="match_parent"
  161.                     android:background="@drawable/ic_launcher"
  162.                     android:contentDescription="@string/app_name"/>
  163.                
  164.         <TextView
  165.             android:id="@+id/dialog_title"
  166.             android:layout_width="match_parent"
  167.             android:layout_height="45dp"
  168.             android:layout_marginLeft="5dp"
  169.             android:gravity="left|center_vertical"
  170.             android:paddingBottom="5dp"
  171.             android:paddingTop="5dp"
  172.             android:textColor="#000"
  173.             android:textSize="22sp" />
  174.         </LinearLayout>
  175.     <ImageView
  176.         android:layout_width="match_parent"
  177.         android:layout_height="1dp"
  178.         android:background="@drawable/divider_horizontal_bright"
  179.         android:contentDescription="@string/app_name" />

  180.     <FrameLayout
  181.         android:layout_width="match_parent"
  182.         android:layout_height="wrap_content"
  183.         android:background="@drawable/dialog_middle_holo_light" >

  184.         <TextView
  185.             android:id="@+id/dialog_message"
  186.             android:layout_width="match_parent"
  187.             android:layout_height="wrap_content"
  188.             android:gravity="center"
  189.             android:textColor="#000"
  190.             android:paddingTop="15dp"
  191.             android:paddingBottom="15dp"
  192.             android:textSize="18sp" />

  193.         <FrameLayout
  194.             android:id="@+id/dialog_middle_view"
  195.             android:layout_width="match_parent"
  196.             android:layout_height="wrap_content"
  197.             android:minHeight="30dp" />
  198.     </FrameLayout>

  199.     <LinearLayout
  200.         android:id="@+id/dialog_linear_bottom"
  201.         android:layout_width="match_parent"
  202.         android:layout_height="48dp"
  203.         android:background="@drawable/dialog_bottom_holo_light"
  204.         android:orientation="horizontal" >

  205.         <Button
  206.             android:id="@+id/dialog_sure"
  207.             android:layout_width="0dp"
  208.             android:layout_height="match_parent"
  209.             android:layout_weight="1"
  210.             android:layout_marginRight="0dp"
  211.             android:background="@drawable/btn" />

  212.         <Button
  213.             android:id="@+id/dialog_cancel"
  214.             android:layout_width="0dp"
  215.             android:layout_height="match_parent"
  216.             android:layout_weight="1"
  217.             android:background="@drawable/btn" />
  218.     </LinearLayout>

  219. </LinearLayout>

  220. /* dialog style */
  221. <style name="style_self_dialog_toast" parent="@android:style/Theme.Dialog">
  222.         <item name="android:windowFrame">@null</item>
  223.         <item name="android:windowBackground">@drawable/dialog_bg_color</item>
  224.         <item name="android:windowIsTranslucent">true</item>
  225.         <item name="android:windowNoTitle">true</item>
  226.         <item name="android:windowIsFloating">true</item>
  227.         <item name="android:minHeight">60dp</item>
  228.         <item name="android:maxHeight">400dp</item>
  229.         <item name="android:minWidth">240dp</item>
  230.         <item name="android:maxWidth">280dp</item>
  231. </style>

  232. /* 应用 */
  233. public class ThridActivity extends FragmentActivity{
  234.         public AlertDialogImpl impl;
  235.         @Override
  236.         protected void onCreate(Bundle arg0) {
  237.                 // TODO Auto-generated method stub
  238.                 super.onCreate(arg0);
  239.                 setContentView(R.layout.tabwidgets_layout);
  240.                 ((TextView)findViewById(R.id.tabwidget_indicator)).setOnClickListener(new OnClickListener() {
  241.                        
  242.                         @Override
  243.                         public void onClick(View v) {
  244.                                 // TODO Auto-generated method stub
  245.                                 View view = (View)getLayoutInflater().inflate(R.layout.progress_dialog_view, null);
  246.                                 impl = new AlertDialogImpl.Builder(ThridActivity.this)
  247.                                 .setTitle("温馨提示")
  248.                                 .setView(view)
  249.                                 .setPositive("确定", new OnClickListener() {
  250.                                        
  251.                                         @Override
  252.                                         public void onClick(View v) {
  253.                                                 // TODO Auto-generated method stub
  254.                                                 Log.e("onclick", "sure");
  255.                                                 impl.dismiss();
  256.                                         }
  257.                                 })
  258.                                 .setNegative("取消", new OnClickListener() {
  259.                                        
  260.                                         @Override
  261.                                         public void onClick(View v) {
  262.                                                 // TODO Auto-generated method stub
  263.                                                 Log.e("onclick", "cancel");
  264.                                                 impl.dismiss();
  265.                                         }
  266.                                 })
  267.                                 .show();
  268.                         }
  269.                 });
  270.         }
  271. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马