zoukankan      html  css  js  c++  java
  • Android学习自定义Dialog

    Dialog是Android提供的各种对话框的基类,和上篇的DialogFragment类似。为什么还要介绍Dialog呢,因为DialogFragment只能运行在Android3.0以上的系统中。虽然现在手机更新的很快,Android系统更新的也很快,但是Android3.0系统以下的用户,还是存在不少的。所以采用Dialog拥有一定的优势。

    这篇文章需要实现的是arcgis for android 的地图切换,gis系统一般会为用户提供多种用户的选中,地图切换是必须的。

    1.mapswitchDialog

    在res的layout中新建android的xml文档。

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout android:layout_width="fill_parent"
     3     android:layout_height="fill_parent"
     4     android:background="@color/white"
     5     android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
     6 
     7 <LinearLayout
     8     android:id="@+id/l1"
     9     android:layout_width="fill_parent"
    10     android:layout_height="wrap_content"
    11     android:background="@drawable/common_top_layer_with_projection_bg"
    12     android:gravity="center"
    13     android:orientation="horizontal" >
    14     
    15     <ImageButton
    16         android:id="@+id/imgswichclose"
    17         android:layout_width="wrap_content"
    18         android:layout_height="wrap_content"
    19         android:clickable="true"
    20         android:src="@drawable/icon_cancel_normal" />
    21     
    22     <TextView
    23         android:layout_width="fill_parent"
    24         android:layout_height="fill_parent"
    25         android:layout_gravity="center"
    26         android:gravity="right|center"
    27         android:text="@string/switchmap"
    28         android:textColor="@color/black"
    29         android:textSize="12sp" />
    30 
    31 </LinearLayout>
    32 
    33 <LinearLayout
    34     android:layout_width="fill_parent"
    35     android:layout_height="wrap_content"
    36     android:layout_below="@id/l1"
    37     android:orientation="horizontal" >
    38 
    39 <LinearLayout
    40     android:layout_width="wrap_content"
    41     android:layout_height="wrap_content"
    42     android:layout_below="@id/l1"
    43     android:gravity="center"
    44     android:orientation="vertical" >
    45 
    46     <ImageButton
    47         android:id="@+id/imgmap_1"
    48         android:layout_width="wrap_content"
    49         android:layout_height="wrap_content"
    50         android:src="@drawable/main_map_mode_3d_normal" />
    51 
    52     <TextView
    53         android:layout_width="wrap_content"
    54         android:layout_height="wrap_content"
    55         android:text="@string/smap1"
    56         android:textColor="@color/black"
    57         android:layout_gravity="center"
    58         android:gravity="right|center" />
    59 
    60 </LinearLayout>
    61 
    62 <LinearLayout
    63     android:id="@+id/l3"
    64     android:layout_width="wrap_content"
    65     android:layout_height="wrap_content"
    66     android:layout_marginLeft="20dp"
    67     android:gravity="center"
    68     android:orientation="vertical" >
    69 
    70     <ImageButton
    71         android:id="@+id/imgmap_2"
    72         android:layout_width="wrap_content"
    73         android:layout_height="wrap_content"
    74         android:src="@drawable/main_map_mode_3d_normal" />
    75 
    76 <TextView
    77       android:layout_width="wrap_content"
    78         android:layout_height="wrap_content"
    79     android:layout_gravity="center"
    80     android:text="@string/map_2"
    81     android:textColor="@color/black" />
    82 
    83 </LinearLayout>
    84 </LinearLayout>
    85 </RelativeLayout>
    mapdialog

    这个xml文档,也就是我们所说的地图切换的布局页面。

    2.建立mapSwitchDialog类

    在类中,和DialogFragment情况相似,需要实现onCreate()方法。

     1 public class MapswichFragment extends Dialog {
     2 
     3     
     4     private refreshUIListener listenr;
     5     public MapswichFragment(Context context) {
     6         super(context);
     7         // TODO Auto-generated constructor stub
     8     }
     9     public MapswichFragment(Context context,refreshUIListener listener)
    10     {
    11         super(context);
    12         this.listenr=listener;
    13     }
    14      protected void onCreate(Bundle savedInstanceState) {
    15             // TODO Auto-generated method stub
    16             super.onCreate(savedInstanceState);
    17             this.setContentView(R.layout.mapswitch_fragment);
    18             ImageView image1=(ImageView)findViewById(R.id.imgswichclose);
    19             image1.setOnClickListener(new View.OnClickListener() {
    20                 
    21                 public void onClick(View v) {
    22                     // TODO Auto-generated method stub
    23                 dismiss();
    24                 }
    25             });
    26             ImageButton img1=(ImageButton)findViewById(R.id.imgmap_1);
    27             img1.setOnClickListener(new View.OnClickListener() {
    28                 
    29                 public void onClick(View v) {
    30                     // TODO Auto-generated method stub
    31                     listenr.refreshUi();
    32                     
    33                 }
    34 
    35             });
    36         }
    37      public interface refreshUIListener
    38      {
    39          public void refreshUi();
    40      }
    41 
    42 }
    Dialog class

    在oncreate方法中,为该dialog指定页面。需要强调的是,在进行地图切换的时候,地图需要实时的在手机上进行显示,也就是我们点击dialog中的图片按钮,Activity要进行更新。在网上看到别人的解决方法还不错,通过定义接口的方法来实现。定义一个事件监听的接口,并在接口中定义一个方法,在构造函数中初始化该监听,在事件中调用该方法。

    3.main.xml

    main.xml是主页面,这里就不多说了,需要添加一个mapview和一个button。mapview用来显示地图,button用来切换地图。

    button的监听事件中调用刚刚定义的dialog就可以实现地图切换。

     1  ImageButton imgswitch=(ImageButton)findViewById(R.id.btnmapswitch);
     2          imgswitch.setOnClickListener(new View.OnClickListener() {
     3             
     4             @Override
     5             public void onClick(View v) {
     6                 // TODO Auto-generated method stub
     7                 MapswichFragment frag=new MapswichFragment(MainMapActivity.this,new MapswichFragment.refreshUIListener() {
     8                     
     9                     @Override
    10                     public void refreshUi() {
    11                         // TODO Auto-generated method stub
    12                         mMapView.removeAll();
    13                         ArcGISTiledMapServiceLayer titleLayer=new ArcGISTiledMapServiceLayer(layerurl);
    14                         mMapView.addLayer(titleLayer);
    15                         mMapView.addLayer(graphcisLayer);
    16                     }
    17                 });
    18                 frag.requestWindowFeature(Window.FEATURE_NO_TITLE);
    19                 frag.show();
    20             }
    21         });
    地图切换

    4.dialog.style

    通过style设置dialog的样式。

    1     <style name="dialog" parent="@android:style/Theme.Dialog">
    2         <item name="android:windowFrame">@null</item><!--边框-->
    3         <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
    4         <item name="android:windowIsTranslucent">false</item><!--半透明-->
    5         <item name="android:windowNoTitle">true</item><!--无标题-->
    6         <item name="android:windowBackground">@color/transparent</item><!--背景透明-->
    7         <item name="android:backgroundDimEnabled">false</item><!--模糊-->
    8     </style>
    定义dialog样式

    5.定义dialog位置

    通过windowmanager设置dialog的显示位置。

     1     Window dialogWindow=frag.getWindow();
     2         WindowManager.LayoutParams lg= dialogWindow.getAttributes();
     3         
     4         dialogWindow.setGravity(Gravity.RIGHT|Gravity.TOP);
     5         lg.y=90;
     6         lg.x=20;
     7         lg.height=android.view.WindowManager.LayoutParams.WRAP_CONTENT;
     8         lg.width=(int)(getWindowManager().getDefaultDisplay().getWidth());
     9         dialogWindow.setAttributes(lg);
    10     
    11         frag.setCanceledOnTouchOutside(true);
    dialog的位置
  • 相关阅读:
    【14】算法 (哈希)
    【1】c++11 智能指针
    【13】算法 (平衡二叉树AVL、红黑色RBT、B+树、B-树详解)
    JavaScript 基础四
    JavaScript 基础三
    JavaScript 基础二
    遍历数组,对象和JSON
    创建对象的两种方式
    CSS3动画旋转——(图片360°旋转)
    产品运营和数据分析
  • 原文地址:https://www.cnblogs.com/ggz19/p/3837823.html
Copyright © 2011-2022 走看看