Android自定义对话框

今天是我写的第一篇博客,对于Android学习了快半年了,对Android也有一些了解,于是今天就来分享一个自己对Android自定义对话框的学习心得。

  1. 对于Android自带的对话框,可以说极其丑陋。很多App中的对话框,都有不一样的风格。
  2. 自定义对话框其实就是重写系统自带的对话框。
  3. 在加上自己编写的Xml文件,这要,对话框和其他页面就没有太多的区别了。

进入主题:
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn_confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="确定" />

</RelativeLayout>

dialog_confirm.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    android:layout_margin="20dp"
    android:background="@drawable/shape_cornurs_retangle"
    android:layout_gravity="center"
    >


    <TextView 
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"

        android:layout_height="0dp"
        android:textColor="@color/dark_gray"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
                android:layout_weight="1"
        android:layout_gravity="center"
        android:textSize="17sp"
        android:text="标题"/>

    <LinearLayout 
          android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
        >

        <TextView 
        android:id="@+id/tv_msg1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/dark_gray"
                android:layout_weight="1"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:textSize="17sp"
        android:text="内容文本"/>
    <Spinner

        android:id="@+id/spinner1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/dark_gray"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
        android:textSize="17sp"
                        android:layout_weight="1"


        android:text="标题"/>


    </LinearLayout>


    <LinearLayout 
          android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 
                 android:gravity="center"

        >

        <TextView 
        android:id="@+id/tv_msg2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/dark_gray"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
                android:layout_weight="1"

        android:textSize="17sp"
        android:text="内容文本"/>
    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="@color/dark_gray"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="16dp"
                android:layout_weight="1"

        android:textSize="17sp"
        android:text="标题"/>


    </LinearLayout>

    <View 
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/light_gray2"/>

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:orientation="horizontal">

        <Button 
            android:id="@+id/btn_ok"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="确定"
            android:textColor="@color/blue"
            android:textSize="18sp"
            android:background="@drawable/selector_dialog_left_btn"/>




    </LinearLayout>


</LinearLayout>

MainActivity.java


import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn_confirm=(Button) findViewById(R.id.btn_confirm);
        btn_confirm.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                showDialog();
            }
        });
    }


    /**
     * 显示一个对话框
     */
    private void showDialog() {

        // 使用自定义对话框,同时使用自定义监听接口
        CofiDialog dialog = new CofiDialog(this, "选择",
                new DiaglogListener() {

                    @Override
                    public void onClickOkDiaglog(Dialog dialog, View v) {
                        //要处理是的事物从这里开始写  这个方法是 确定按钮后执行的


                        dialog.cancel();// 清除确定的对话框

                    }

                    @Override
                    public void onClickCancerDiaglog(Dialog dialog, View v) {
                        dialog.cancel();// 取消对话框

                    }

                });
        dialog.show();

    }


}

在这里我自定了连个接听方法接口

DiaglogListener.java


import android.app.Dialog;
import android.view.View;

public interface DiaglogListener {

    /**确定监听*/
    void onClickOkDiaglog(Dialog dialog,View v);
    /**取消监听*/
    void onClickCancerDiaglog(Dialog dialog,View v);
}

这个java类就是 自定义对话框 继承了AlertDialog 系统对话框

其他跟其他Activity一样


import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;


public class CofiDialog extends AlertDialog  implements android.view.View.OnClickListener{

    //确定
    private Button btn_ok;


    private TextView tv_title;
    private TextView tv_msg2;

    private TextView tv_msg1;

    private String msg;
    private String title;

    //自定义监听接口
    private DiaglogListener listener;


    private Spinner spinner1;
    private Spinner spinner2;
    private List<String> data_list;
    private ArrayAdapter<String> arr_adapter;

    public CofiDialog(Context context,String title,DiaglogListener listener) {
        super(context);
        this.title=title;
        this.listener = listener;



    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

      setContentView(R.layout.dialog_confirm);
      btn_ok=(Button) findViewById(R.id.btn_ok);
      tv_msg1=(TextView) findViewById(R.id.tv_msg1);
      tv_msg2=(TextView) findViewById(R.id.tv_msg2);
      spinner1=(Spinner) findViewById(R.id.spinner1);
      spinner2=(Spinner) findViewById(R.id.spinner2);

      tv_title=(TextView) findViewById(R.id.tv_title);
      btn_ok.setOnClickListener(this);
      tv_title.setText(title);


        data_list = new ArrayList<String>();
        data_list.add("北京");
        data_list.add("上海");
        data_list.add("广州");
        data_list.add("深圳");

        //适配器
        arr_adapter= new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, data_list);
        //设置样式
        arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //加载适配器
        spinner1.setAdapter(arr_adapter);

        spinner1.setOnItemSelectedListener(new OnItemSelectedListenerImplSpinner1());

      //适配器
        arr_adapter= new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, data_list);
        //设置样式
        arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //加载适配器
        spinner2.setAdapter(arr_adapter);


        spinner2.setOnItemSelectedListener(new OnItemSelectedListenerImplSpinner2());
    }


    //自定监听
      private class OnItemSelectedListenerImplSpinner1 implements OnItemSelectedListener {  
            @Override  
            public void onItemSelected(AdapterView<?> adapterView, View view,  
                    int position, long id) {                        // 选项选中时触发  
                Toast.makeText(getContext(), data_list.get(position), Toast.LENGTH_LONG).show();
                tv_msg1.setText(data_list.get(position).toString());
            }  
            @Override  
            public void onNothingSelected(AdapterView<?> adapterView) {   // 没有选项时触发  

            }  
        } 





        //自定监听
          private class OnItemSelectedListenerImplSpinner2 implements OnItemSelectedListener {  
                @Override  
                public void onItemSelected(AdapterView<?> adapterView, View view,  
                        int position, long id) {                        // 选项选中时触发  

                    Toast.makeText(getContext(), data_list.get(position), Toast.LENGTH_LONG).show();
                    tv_msg2.setText(data_list.get(position).toString());
                }  
                @Override  
                public void onNothingSelected(AdapterView<?> adapterView) {   // 没有选项时触发  
                }  
            } 


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_ok:  //确定
            listener.onClickOkDiaglog(this, v);
            break;


        default:
            break;
        }
    }





}

Android对话框 到此结束,希望对大家有帮助

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值