您的位置:首页 > 移动开发 > Android开发

Android自定义iOS风格Dialog

2016-11-15 15:19 555 查看
效果图:







实现步骤:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: