android开发小技巧(3)dialog自定义弹出框的使用

来源:互联网 发布:js控制div背景颜色 编辑:程序博客网 时间:2024/05/15 22:45

今天写一写自定义dialog的使用。有时候我们做项目,为了项目的美观,系统自带的dialog就不大合适了,所以就需要我们自己去定制一个好看的dialog,用来切合项目,我一般是做成一个模板,根据这一个自己修改一下,然后一系列的弹出框就都有了。很简单,需要一个自定义的布局文件,这个需要好好设计下,用shape来美化下就可以做出不错的效果来。先看一下效果:

 

 

 

 

 


 

 

先上中间效果的代码,其他俩可以稍微修改下布局文件就可以。

 

public void showOpenPhoneDialog() {

  dialog = new Dialog(LongLoveActivity.this, R.style.CustomDialog);
  LayoutInflater layoutInflater = (LayoutInflater) LongLoveActivity.this
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  View myView = layoutInflater.inflate(R.layout.longlove_openiphone_item,
    null);
  dialog.setContentView(myView);
  mProgressLogin = (ProgressBar) myView
    .findViewById(R.id.refresh_progressbar);
  phone = (TextView) myView.findViewById(R.id.ll_phnum);
  ok = (Button) myView.findViewById(R.id.negativeButton);
  cance = (Button) myView.findViewById(R.id.positiveButton);
  ok.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub

//在这里处理确定按钮事件

   }
  });
  cance.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    dialog.dismiss();

//这里处理取消按钮操作
   }
  });
  dialog.show();

 

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:orientation="vertical"
    android:padding="20.0dip" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/dialog_top_bkg"
        android:orientation="vertical" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="40dp" >

            <TextView
                android:id="@+id/title"
                style="@style/text_20_ffffff"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:text="电话回拨"
                android:visibility="visible" />

            <ProgressBar
                android:id="@+id/refresh_progressbar"
                android:layout_width="24dip"
                android:layout_height="24dip"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="5dip"
                android:visibility="invisible" >
            </ProgressBar>
        </RelativeLayout>

        <View
            android:layout_width="fill_parent"
            android:layout_height="2.0px"
            android:background="#d0d0d0" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="40.0dip"
            android:layout_gravity="bottom"
            android:background="@drawable/dialog_bottom_bg"
            android:gravity="center"
            android:orientation="horizontal"
            android:weightSum="2" >

            <TextView
                android:id="@+id/ll_phonenum"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:text="电话号码:" />

            <EditText
                android:id="@+id/ll_phnum"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginRight="6dip"
                android:minWidth="100dip"
                android:numeric="integer"
                android:singleLine="true" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="30.0dip"
            android:layout_gravity="bottom"
            android:background="@drawable/dialog_bottom_bg"
            android:gravity="center"
            android:orientation="horizontal"
            android:weightSum="2" >

            <TextView
                android:id="@+id/tvname"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:text="例如:053182605000/15098770000" />
        </LinearLayout>

        <View
            android:layout_width="fill_parent"
            android:layout_height="1.0px"
            android:background="#ffd0d0d0" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="40.0dip"
            android:layout_gravity="bottom"
            android:background="@drawable/dialog_bottom_bg"
            android:gravity="center"
            android:orientation="horizontal"
            android:weightSum="2" >

            <Button
                android:id="@+id/positiveButton"
                style="@style/text_15_666666_sdw"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:background="@drawable/common_wite_btn_selector"
                android:gravity="center"
                android:text="@string/cancel" />

            <Button
                android:id="@+id/negativeButton"
                style="@style/text_15_666666_sdw"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_marginLeft="-1dp"
                android:layout_weight="1"
                android:background="@drawable/common_wite_btn_selector"
                android:gravity="center"
                android:text="@string/ok" />
        </LinearLayout>
    </LinearLayout>

</FrameLayout>

 

 

style样式:

   <style name="text_20_ffffff">
        <item name="android:textSize">19sp</item>
        <item name="android:textColor">#4169E1</item>
    </style>

 

背景样式(这里就用到了shape):dialog_bottom_bg.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <gradient android:startColor="#4fe7e7e7" android:endColor="#4fe7e7e7" android:angle="0.0" />
            <corners android:topLeftRadius="0.0dip" android:topRightRadius="0.0dip" android:bottomLeftRadius="15.0px" android:bottomRightRadius="15.0px" />
        </shape>
    </item>
</layer-list>

 

俩按钮的动态效果shape文件:common_wite_btn_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector 
   xmlns:android="http://schemas.android.com/apk/res/android"> 
 
 <!-- 按下的效果 -->
 <item android:state_pressed="true" > 
    <shape> 
       <!-- 渐变 --> 
          <gradient 
             android:startColor="#C0C0C0" 
             android:endColor="#C0C0C0" 
             android:angle="270" />  
       <!-- 描边 --> 
        <stroke 
             android:width="1dp" 
             android:color="#808080" /> 
        <!-- 圆角 --> 
        <corners 
            android:radius="0dp" /> 
        <padding 
            android:left="10dp" 
            android:top="10dp" 
            android:right="10dp" 
            android:bottom="10dp" /> 
     </shape> 
    </item> 
   
 <!-- 选中的效果 -->
   <item android:state_focused="true" > 
      <shape> 
          <gradient 
             android:startColor="#F5F5F5" 
             android:endColor="#F5F5F5" 
             android:angle="270" /> 
          <stroke 
             android:width="1dp" 
             android:color="#808080" /> 
         <corners 
              android:radius="0dp" /> 
         <padding 
             android:left="10dp" 
              android:top="10dp" 
              android:right="10dp" 
              android:bottom="10dp" /> 
      </shape> 
   </item> 
  
   <!-- 常态的效果 -->
  <item>       
       <shape> 
          
          <gradient 
             android:startColor="#F5F5F5" 
             android:endColor="#F5F5F5" 
             android:angle="270" /> 
          
        <!-- 描边 --> 
        <stroke 
             android:width="1dp" 
             android:color="#808080" />  
           <corners 
               android:topRightRadius="0dp" 
               android:bottomLeftRadius="0dp" 
              android:topLeftRadius="0dp" 
               android:bottomRightRadius="0dp" 
          /> 
          <padding 
              android:left="10dp" 
               android:top="10dp" 
               android:right="10dp" 
               android:bottom="10dp" /> 
      </shape> 
   </item> 
</selector> 

以上就是所有代码了,直接粘贴复制就可以用了,里面有些字体样式如果没有删除就行,或者引入自己定义好的样式,不报错运行基本上就是中间效果的样式了。

------------------------------------------------------------------------传说中的分割线----------------------------------------------------------------------

然后其实dialog还可以半透明和圆角,大家可以试着修改以上的布局文件和shape文件,完全可以形成自己一系列的dialog样式。比如下面这种:

 

 

0 0