Android自定义iOS风格Dialog


效果图:

Android自定义iOS风格Dialog_第1张图片

Android自定义iOS风格Dialog_第2张图片

Android自定义iOS风格Dialog_第3张图片


实现步骤:

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

   
2、 在drawable文件夹中声明如下EditText和Dialog主布局的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



你可能感兴趣的:(android,界面,android开发)