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的位置

 

你可能感兴趣的:(Android学习)