Android自定义iOS风格Dialog
2016-11-15 15:19
555 查看
效果图:
![](http://img.blog.csdn.net/20161115152035770?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20161115152053812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20161115152111943?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
实现步骤:
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>
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中控件的监听
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、在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
相关文章推荐
- Android开篇之高仿ios风格的自定义Dialog
- Android模拟IOS风格的自定义Dialog底部弹窗案例
- Android AlertDialog对话框自定义风格的另类实现
- android底部弹出iOS7风格对话选项框(QQ对话框)--第三方开源之IOS_Dialog_Library
- Android AlertDialog对话框自定义风格的另类实现
- Android自定义加载等待Dialog弹窗控件(仿ios效果实现)
- Android 自定义View之仿IOS Dialog
- 2.28学习内容,android,dialog自定义宽高、ios判断网络可用性
- Android material 风格和 ios 风格的 dialog,可传入 context 构建,在任意地方弹出,一行代码调用
- Android自定义Dialog仿IOS的Dialog
- Android自定义View-------IOS风格的滑动开关
- Android自定义样式(风格)的dialog对话框(点击其中的按钮跳转到下一个页面)
- Android:自定义Material Design风格的Dialog
- Android仿IOS自定义AlertDialog提示框
- Android UI设计之<七>自定义Dialog,实现各种风格效果的对话框
- (转)android底部弹出iOS7风格对话选项框(QQ对话框)--第三方开源--IOS_Dialog_Library
- Android UI设计系列之自定义Dialog实现各种风格的对话框效果(7)
- 【Android之IOS风格Dialog对话框】
- Android自定义加载等待Dialog弹窗控件(仿ios效果实现)
- Android:自定义Material Design风格的Dialog