Android自定义iOS风格Dialog


效果图:





实现步骤:

1、在res/values/styles中声明自定义风格的style

   <style name="qwsdkDialog" 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">@android:color/transparent</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">false</item><!--模糊-->
    </style>
2、 在drawable文件夹中声明如下EditText和Dialog主布局的shape

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners android:radius="5dp"/>
    <stroke android:width="0.2dp" android:color="#cccccc"/>
	<solid android:color="#ffffff"/>
</shape>
<shape xmlns:android="http://schemas.android.com/apk/res/android">  
  
    <solid android:color="#eeeeee" />  
    <stroke  
        android:width="0.8dp"  
        android:color="#666666" />  
    <!-- 圆角 -->  
    <corners android:radius="20dp" />  
  
</shape> 
3、创建SexselecDialog继承自Dialog,实现View.OnClickListener接口,在类中自定义接口实现SexselecDialog中控件的监听

public class SexselecDialog extends Dialog{
	private TextView tvCancel;
	private TextView tvMale;
	private TextView tvFemale;
	int layoutRes;
    Context context;
    private OnTextClickdListener mOnTextClickListener; 
    /**
     *
     */
    public interface OnTextClickdListener{
    	void onMaleClick();
    	void onFemaleClick();
    }
    
    public void setOnTextClickListener(OnTextClickdListener listener){
    	this.mOnTextClickListener = listener;
    }
    
    
    
    
    public SexselecDialog(Context context) {
        super(context);
        this.context = context;
    }
    /**
     * @param context
     * @param resLayout
     */
    public SexselecDialog(Context context,int resLayout){
        super(context);
        this.context = context;
        this.layoutRes=resLayout;
    }
    /**
     * @param context
     * @param theme
     * @param resLayout
     */
    public SexselecDialog(Context context, int theme,int resLayout){
        super(context, theme);
        this.context = context;
        this.layoutRes=resLayout;
        
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(layoutRes);   
        init();
        setListener();
        
    }	
    
    private void init(){
    	getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    	try{ int dividerID=context.getResources().getIdentifier("android:id/titleDivider", null, null); 		
    	View divider=findViewById(dividerID); 		
    	divider.setBackgroundColor(context.getResources().getColor(android.R.color.transparent)); 	
    	}catch(Exception e){ 		
    	}
    	tvCancel = (TextView) findViewById(R.id.tv_cancel);
    	tvMale = (TextView) findViewById(R.id.tv_male);
    	tvFemale = (TextView) findViewById(R.id.tv_female);
    }
    
    private void setListener(){
    	tvCancel.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				SexselecDialog.this.dismiss();
			}
		});
    	
    	tvMale.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				mOnTextClickListener.onMaleClick();
				Toast.makeText(context, "男", Toast.LENGTH_SHORT).show();
			}
		});
    	
    	tvFemale.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				mOnTextClickListener.onFemaleClick();
				Toast.makeText(context, "女", Toast.LENGTH_SHORT).show();
			}
		});
    	
    }
}

4、创建SignDialog继承自Dialog,实现View.OnClickListener接口,在类中自定义接口实现SignDialog中控件的监听
public class SignDialog extends Dialog {
	private TextView tvCancel;
	private TextView tvConfirm;
	private EditText editText;
	int layoutRes;
	Context context;
	private OnEditTextChangedListener mOnEditTextChangedListener;
	/**
	 *	自定义监听EditText的回调接口 
	 */
	public interface OnEditTextChangedListener{
		void onChange(String text);
	}
	
	public void setOnEditTextChangedListener(OnEditTextChangedListener listener){
		this.mOnEditTextChangedListener = listener;
	}

	public SignDialog(Context context) {
		super(context);
		this.context = context;
	}

	/**
	 * 
	 * @param context
	 * @param resLayout
	 */
	public SignDialog(Context context, int resLayout) {
		super(context);
		this.context = context;
		this.layoutRes = resLayout;

	}

	/**
	 * 
	 * @param context
	 * @param theme
	 * @param resLayout
	 */
	public SignDialog(Context context, int theme, int resLayout) {
		super(context, theme);
		this.context = context;
		this.layoutRes = resLayout;

	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(layoutRes);
		init();
		setListener();
	}

	private void init() {
		getWindow().setBackgroundDrawableResource(android.R.color.transparent);
		try {
			int dividerID = context.getResources().getIdentifier(
					"android:id/titleDivider", null, null);
			View divider = findViewById(dividerID);
			divider.setBackgroundColor(context.getResources().getColor(
					android.R.color.transparent));
		} catch (Exception e) {

		}

		tvCancel = (TextView) findViewById(R.id.tv_cancel);
		tvConfirm = (TextView) findViewById(R.id.tv_confirm);
		editText = (EditText) findViewById(R.id.edittext);
	}
	
	private void setListener(){
		tvCancel.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				SignDialog.this.dismiss();
			}
		});
		
		//点击确定按钮,回调onChange方法
		tvConfirm.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				mOnEditTextChangedListener.onChange(editText.getText().toString());
			}
		});
	}

}

5、使用Demo

package com.example.dialogs;

import com.example.dialogs.SexselecDialog.OnTextClickdListener;
import com.example.dialogs.SignDialog.OnEditTextChangedListener;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

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

	private void setListeners() {
		Listener l = new Listener();
		findViewById(R.id.bt_sign).setOnClickListener(l);
		findViewById(R.id.bt_nickname).setOnClickListener(l);
		findViewById(R.id.bt_sexselec).setOnClickListener(l);

	}

	private class Listener implements OnClickListener {
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.bt_sign:
				SignDialog signDialog = new SignDialog(MainActivity.this,
						R.layout.qwsdk_dialog_sign);
				signDialog.show();
				signDialog.setOnEditTextChangedListener(new OnEditTextChangedListener() {
					@Override
					public void onChange(String text) {
						// TODO Auto-generated method stub
						
					}
				});
				break;

			case R.id.bt_nickname:
				SignDialog nickDialog = new SignDialog(MainActivity.this,
						R.layout.qwsdk_dialog_nickname);
				nickDialog.show();
				break;
			case R.id.bt_sexselec:
				SexselecDialog sextDialog = new SexselecDialog(
						MainActivity.this, R.layout.qwsdk_dialog_sexselec);
				sextDialog.show();
				sextDialog.setOnTextClickListener(new OnTextClickdListener() {
					@Override
					public void onMaleClick() {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onFemaleClick() {
						// TODO Auto-generated method stub
						
					}
				});
				break;
			}
		}

	}

}

源码下载: http://download.csdn.net/detail/coder_e/9683447



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值