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

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

1.mapswitchDialog

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

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white"
android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout
android:id="@+id/l1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/common_top_layer_with_projection_bg"
android:gravity="center"
android:orientation="horizontal" > <ImageButton
android:id="@+id/imgswichclose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/icon_cancel_normal" /> <TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:gravity="right|center"
android:text="@string/switchmap"
android:textColor="@color/black"
android:textSize="12sp" /> </LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/l1"
android:orientation="horizontal" > <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/l1"
android:gravity="center"
android:orientation="vertical" > <ImageButton
android:id="@+id/imgmap_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/main_map_mode_3d_normal" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/smap1"
android:textColor="@color/black"
android:layout_gravity="center"
android:gravity="right|center" /> </LinearLayout> <LinearLayout
android:id="@+id/l3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:gravity="center"
android:orientation="vertical" > <ImageButton
android:id="@+id/imgmap_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/main_map_mode_3d_normal" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/map_2"
android:textColor="@color/black" /> </LinearLayout>
</LinearLayout>
</RelativeLayout>

mapdialog

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

2.建立mapSwitchDialog类

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

 public class MapswichFragment extends Dialog {

     private refreshUIListener listenr;
public MapswichFragment(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MapswichFragment(Context context,refreshUIListener listener)
{
super(context);
this.listenr=listener;
}
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.mapswitch_fragment);
ImageView image1=(ImageView)findViewById(R.id.imgswichclose);
image1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
dismiss();
}
});
ImageButton img1=(ImageButton)findViewById(R.id.imgmap_1);
img1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
listenr.refreshUi(); } });
}
public interface refreshUIListener
{
public void refreshUi();
} }

Dialog class

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

3.main.xml

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

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

  ImageButton imgswitch=(ImageButton)findViewById(R.id.btnmapswitch);
imgswitch.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
MapswichFragment frag=new MapswichFragment(MainMapActivity.this,new MapswichFragment.refreshUIListener() { @Override
public void refreshUi() {
// TODO Auto-generated method stub
mMapView.removeAll();
ArcGISTiledMapServiceLayer titleLayer=new ArcGISTiledMapServiceLayer(layerurl);
mMapView.addLayer(titleLayer);
mMapView.addLayer(graphcisLayer);
}
});
frag.requestWindowFeature(Window.FEATURE_NO_TITLE);
frag.show();
}
});

地图切换

4.dialog.style

通过style设置dialog的样式。

     <style name="dialog" 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">false</item><!--模糊-->
</style>

定义dialog样式

5.定义dialog位置

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

     Window dialogWindow=frag.getWindow();
WindowManager.LayoutParams lg= dialogWindow.getAttributes(); dialogWindow.setGravity(Gravity.RIGHT|Gravity.TOP);
lg.y=90;
lg.x=20;
lg.height=android.view.WindowManager.LayoutParams.WRAP_CONTENT;
lg.width=(int)(getWindowManager().getDefaultDisplay().getWidth());
dialogWindow.setAttributes(lg); frag.setCanceledOnTouchOutside(true);

dialog的位置

Android学习自定义Dialog的更多相关文章

  1. Android创建自定义dialog方法详解-样式去掉阴影效果

    在自定义组件时,从已有组件源码中会很大收获.就拿progressDialog来说     间接父类是dialog,想了解dialog继承结构可以去百度,或者    从构造器来说ProgressDial ...

  2. Android:自定义Dialog

    自定义Dialog:显示SeekBar 效果图: 步骤: //SettingActivity.java button4.setOnClickListener(new View.OnClickListe ...

  3. Android学习之Dialog

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框; 实例如下: 1.效果图: 2.XML代码: ...

  4. 【Android】自定义Dialog

    先上图 main.xml主界面文件 <?xml version="1.0" encoding="utf-8"?><LinearLayout x ...

  5. Android学习笔记-Dialog详解

    1.对话框的使用 1.1AlertDialog的显示 简单对话框以及监听的设置:重点掌握三个按钮(也就是三上单词): PositiveButton(确认按钮);NeutralButton(忽略按钮) ...

  6. Android如何自定义dialog

    ; window.setAttributes(lp); // set the confirm button if (positiveButtonClickListener != null) { ((B ...

  7. Android学习----自定义Adapter实现ListView

    前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(), ...

  8. Android开发之自定义Dialog简单实现

    本文着重研究了自定义对话框,通过一下步骤即可清晰的理解原理,通过更改界面设置和style类型,可以应用在各种各样适合自己的App中. 首先来看一下效果图: 首先是activity的界面 点击了上述图片 ...

  9. 【转】 Pro Android学习笔记(四四):Dialog(1):触发Dialog

    目录(?)[-] 创建dialog fragment Activity显示对话框 Android提供alert.prompt.pick-list,单选.多选,progress.time-picker和 ...

随机推荐

  1. RehHat enterprise 5.4 安装git

    今天想来研究一下git,就自己安装一个试试,没想到遇到各种问题.经过各种百度和google,终于都解决了,现在来总结一下: 1.安装完redhat 5.4,安装gcc编译器的问题:这个gcc编译器需要 ...

  2. Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8046659 在前文中,我们分析了Surface ...

  3. LoadRunner如何开展性能测试

    最近一直想理清思路,特别是碰到一些业务复杂的项目,要求做性能测试,结果一时就不知道怎么下手了.因为之前面试的时候,也碰到很多面试官对性能测试知识方面的提问,面试多了,就有经验,现在写下来,脑子不会乱, ...

  4. webpack+gulp实现自动构建部署

    项目结构说明 . ├── gulpfile.js # gulp任务配置 ├── mock/ # 假数据文件 ├── package.json # 项目配置 ├── README.md # 项目说明 ├ ...

  5. idea maven 无法加载已经安装的模块

    新建了一下maven项目,下面新建了一个模块,某一个模块clean install之后,别的模块虽然使用dependency标签引入了,但是仍然无法使用, 这个时候,应该重新建立一个项目,将原有项目的 ...

  6. 自定义view(自定义view的时候,三个构造函数各自的作用)

    package com.timeshare.tmband.Utils; import android.content.Context; import android.content.res.Typed ...

  7. HDU 5792 World is Exploding

    题意: 给出n代表序列的长度,接下来给出序列A.找出abcd满足abcd互不相等1<=a<b<c<d<=n的同时A[a]<A[b],A[c]>A[d],问这样 ...

  8. Android 轮询之 Service + AlarmManager+Thread (转)

    android中涉及到将服务器中数据变化信息通知用户一般有两种办法,推送和轮询. 消息推送是服务端主动发消息给客户端,因为第一时间知道数据发生变化的是服务器自己,所以推送的优势是实时性高.但服务器主动 ...

  9. java 包之 BeanUtils包的使用

    BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: (1)   BeanUtils相 ...

  10. 【Android & iOS】应用升级实现

    在移动应用中,都会有的一个功能就是应用版本升级,怎么实现这个功能呢? 基本的思路就是:对比当前使用的应用版本和最新的版本号,如果版本号不一致,就可以提示用户升级啦. Android中,可以通过一下方式 ...