• 下载频道 http://www.it165.net/down/
  • Android学习自定义Dialog

    发布日期:2014-07-11 21:09:50
    • 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         });
      地图切换

    延伸阅读:

    次元立方 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
    本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规