标签:
虽然android有Alterdialog和Progressiondialogl两种,但是这两周都太局限了,有个折中的方法是重新定义个layout,并把该layout设置成dialog样式,这样可以间接的自定义个dialog样式,但是现在android提供了一个更基础的类DialogFragment。然后利用接口回调的方法对点击事件进行监听。
1.DialogFragment.class
@SuppressLint("NewApi")
public class DiagFragment extends DialogFragment implements OnClickListener {
private Context mContext;
private TextView mTv1, mTv2, mTv3;
public interface OnDeptCallBack {
public void onCallBack(String st);
}
private OnDeptCallBack onBack;
public DiagFragment(){
//去除默认的dialog头部
int style = DialogFragment.STYLE_NO_TITLE;
setStyle(style, 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.list_dialog, null);
mContext = getActivity();
initView(view);
return view;
}
/**
* 初始化控件
*/
private void initView(View view) {
mTv1 = (TextView) view.findViewById(R.id.tv_1);
mTv2 = (TextView) view.findViewById(R.id.tv_2);
mTv3 = (TextView) view.findViewById(R.id.tv_3);
mTv1.setOnClickListener(this);
mTv2.setOnClickListener(this);
mTv3.setOnClickListener(this);
}
/**
* @return the onBack
*/
public OnDeptCallBack getOnBack() {
return this.onBack;
}
/**
* @param onBack
* the onBack to set
*/
public void setOnBack(OnDeptCallBack onBack) {
this.onBack = onBack;
}
/**
* 设置弹出的Dialog的样式,这边是居中效果
*
*/
@Override
public void onResume() {
LayoutParams params = getDialog().getWindow().getAttributes();
DisplayMetrics mDisplayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);
params.width = mDisplayMetrics.widthPixels / 2;
params.height = LayoutParams.WRAP_CONTENT;
getDialog().getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
super.onResume();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_1:
onBack.onCallBack("这是text1");
break;
case R.id.tv_2:
onBack.onCallBack("这是text2");
break;
case R.id.tv_3:
onBack.onCallBack("这是text3");
break;
default:
break;
}
}
}
2.list_dialog.xml
三个textview而已,该布局根据需求而定
3.MainActivity.class
public class MainActivity extends Activity {
private Button mBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtn=(Button)findViewById(R.id.bt);
mBtn.setOnClickListener(new OnClickListener() {
@SuppressLint("NewApi")
@Override
public void onClick(View arg0) {
final DiagFragment diaf=new DiagFragment();
diaf.setOnBack(new OnDeptCallBack() {
@Override
public void onCallBack(String st) {
Toast.makeText(MainActivity.this, st, Toast.LENGTH_LONG);
diaf.dismiss();
}
});
diaf.show(MainActivity.this.getFragmentManager(), null);
}
});
}
至此整个项目结束,当你在dialogfragment点击那些textview,在activity就可以根据接口回调监听事件。
如果不是很明白的可以下载源码看看:)
http://download.csdn.net/detail/u013651405/9032603
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u013651405/article/details/47834057