CSDN上有篇Android滾輪時間選擇控件(可擴展自定義),閱讀量很高,看來大家對這塊的需要還是挺大的。版本迭代開發(fā)自測完,等待測試提bug。就抽空把項目需求,自己自定義的一個控件分享給需要的人。里面可以學習到Builder創(chuàng)建者模式,還有就是使用接口,一般新手可能不一定會使用。
先想吐槽一下,今天負能量有點多,端午想找人出去玩,都找不到,回家的回家,陪妹子的陪妹子。果然都是一伙重色輕友的人。我也得抓緊了。
好吧,進入正題。先來看看效果圖。
1.Hello World是一個TextView控件,用于顯示從彈窗選擇的內(nèi)容。里面控件的背景色,標題,文字大小顏色都可以自定義。實際項目中可以用于比如android長按的時候,彈出一些選擇的操作,還有就是一些金額選擇等等。




2.布局文件

3.主界面操作,簡書復制代碼不方便...格式排版有問題,我就直接上圖片。后面的demo里面會有代碼的。

4.重頭戲,選擇彈窗SelectDialog
packageandrew.selectdialogdemo;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.graphics.Color;
importandroid.text.TextUtils;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.LinearLayout;
importandroid.widget.LinearLayout.LayoutParams;
importandroid.widget.TextView;
importjava.util.ArrayList;
importjava.util.List;
/**
* 選擇彈框
* Created by liuhongxia on 2016/05/30
*/
public classSelectDialogextendsBaseNoticeWindowimplementsView.OnClickListener {
privateListmDataList=newArrayList(0);
privateContextmContext;
privateStringmTitleText=null;
private intmTitleBackgroundColor= -1;
private intmTitleTextColor= Color.WHITE;
private intmButtonColor= -1;
private intmTitleTextSize;
private intmButtonSize;
private intmLastButtonSize;
privateArrayListbuttonList=newArrayList();
public static classBuilder {
ContextmContext;
StringmTitleText=null;
intmTitleBackgroundColor= -1;
intmTitleTextColor= Color.WHITE;
intmButtonColor= -1;
intmTitleTextSize=18;
intmButtonSize=14;
intmLastButtonSize=17;
ListmDataList;
publicBuilder(Context context) {
mContext= context;
}
publicSelectDialogbuild() {
return newSelectDialog(this);
}
publicBuildersetTitleText(String title) {
if(TextUtils.isEmpty(title)) {
return null;
}
mTitleText= title;
return this;
}
publicBuildersetTitleBackground(intcolorResId){
mTitleBackgroundColor= colorResId;
return this;
}
publicBuildersetTitleTextColor(intcolorResId){
mTitleTextColor= colorResId;
return this;
}
publicBuildersetTitleTextSize(inttextSize){
mTitleTextSize= textSize;
return this;
}
publicBuildersetButtonColor(intbuttonColor) {
mButtonColor= buttonColor;
return this;
}
publicBuildersetButtonSize(intbuttonSize) {
mButtonSize= buttonSize;
return this;
}
publicBuildersetLastButtonSize(intbuttonSize) {
mLastButtonSize= buttonSize;
return this;
}
publicBuildersetDataList(List list) {
mDataList= list;
return this;
}
}
publicSelectDialog(Builder builder) {
mContext= builder.mContext;
mTitleText= builder.mTitleText;
mTitleBackgroundColor= builder.mTitleBackgroundColor;
mTitleTextColor= builder.mTitleTextColor;
mButtonColor= builder.mButtonColor;
mDataList= builder.mDataList;
mTitleTextSize= builder.mTitleTextSize;
mButtonSize= builder.mButtonSize;
mLastButtonSize= builder.mLastButtonSize;
init();
}
private voidinit(){
if(null==mDataList) {
return;
}
//頭部標題TextView
LayoutParams titleParams =newLayoutParams(
LayoutParams.MATCH_PARENT,ConvertUtils.dip2px(mContext,44));
TextView titleTextView =newTextView(mContext);
titleTextView.setLayoutParams(titleParams);
titleTextView.setBackgroundColor(mContext.getResources().getColor(R.color.topbar));
titleTextView.setTextColor(mTitleTextColor);
titleTextView.setText(mTitleText);
titleTextView.setTextSize(mTitleTextSize);
titleTextView.setGravity(Gravity.CENTER);
//用于添加button和textview的layout
LinearLayout layout =newLinearLayout(mContext);
LayoutParams layoutParams =newLayoutParams(
LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
layoutParams.leftMargin= ConvertUtils.dip2px(mContext,50);
layoutParams.rightMargin= ConvertUtils.dip2px(mContext,50);
layout.setLayoutParams(layoutParams);
layout.setGravity(Gravity.CENTER);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setBackgroundColor(mContext.getResources().getColor(R.color.white));
layout.addView(titleTextView);
//button的屬性
LayoutParams btnParams =newLayoutParams(
LayoutParams.MATCH_PARENT,ConvertUtils.dip2px(mContext,44));
btnParams.leftMargin= ConvertUtils.dip2px(mContext,15);
btnParams.rightMargin= ConvertUtils.dip2px(mContext,15);
//主Layout
LinearLayout mainLayout =newLinearLayout(mContext);
LayoutParams mainLayoutParams =newLayoutParams(
LayoutParams.MATCH_PARENT,mContext.getResources().getDisplayMetrics().heightPixels);
mainLayout.setLayoutParams(mainLayoutParams);
mainLayout.setGravity(Gravity.CENTER);
mainLayout.setOrientation(LinearLayout.VERTICAL);
mainLayout.setBackgroundColor(mContext.getResources().getColor(R.color.alpha50));
//textView的屬性
LayoutParams textParams =newLayoutParams(
LayoutParams.MATCH_PARENT,ConvertUtils.dip2px(mContext,1));
textParams.leftMargin= ConvertUtils.dip2px(mContext,15);
textParams.rightMargin= ConvertUtils.dip2px(mContext,15);
intsize =mDataList.size();
for(inti =0;i < size +1;i++) {
Button tDiscardBtn =newButton(mContext);
buttonList.add(tDiscardBtn);
tDiscardBtn.setLayoutParams(btnParams);
tDiscardBtn.setGravity(Gravity.CENTER);
if(i == size) {
tDiscardBtn.setText("取消");
tDiscardBtn.setTextSize(mLastButtonSize);
tDiscardBtn.setBackgroundColor(mContext.getResources().getColor(R.color.white));
tDiscardBtn.setTextColor(mContext.getResources().getColor(R.color.topbar));
}else{
tDiscardBtn.setText(mDataList.get(i));
tDiscardBtn.setTextSize(mButtonSize);
tDiscardBtn.setBackgroundColor(mContext.getResources().getColor(R.color.white));
tDiscardBtn.setTextColor(mButtonColor);
tDiscardBtn.setTag(i);
}
tDiscardBtn.setOnClickListener(this);
tDiscardBtn.setGravity(Gravity.CENTER);
TextView textView =newTextView(mContext);
textView.setBackgroundColor(mContext.getResources().getColor(R.color.line));
textView.setLayoutParams(textParams);
layout.addView(tDiscardBtn);
//去掉最后一行的線
if(i != size) {
layout.addView(textView);
}
}
mainLayout.addView(layout);
//設置按鈕的屬性
//? ? ? ? setAllButtonStyle();
this.setContentView(mainLayout);
this.setWidth(mContext.getResources().getDisplayMetrics().widthPixels);
this.setHeight(mContext.getResources().getDisplayMetrics().heightPixels);
//? ? ? ? this.setAnimationStyle(R.style.menu_dialog_animation);
this.setOutsideTouchable(true);
mainLayout.setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View view) {
Dismiss(view,BaseNoticeWindow.TYPE_DISMISS_NORMAL);
}
});
}
public voidshow(View parent) {
if(!((Activity)mContext).isFinishing()) {
this.showAtLocation(parent,Gravity.CENTER,0,0);
}
}
public voidsetAllButtonTextColor(intcolorId) {
for(Button button :buttonList) {
button.setTextColor(colorId);
}
}
/**
* 設置button的樣式
*/
public voidsetAllButtonStyle() {
for(Button button :buttonList) {
button.setTextSize(14);
button.setBackgroundColor(mContext.getResources().getColor(R.color.white));
button.setTextColor(mContext.getResources().getColor(R.color.text_10));
}
}
@Override
public voidonClick(View v) {
if(mListener==null) {
dismiss();
return;
}
if(v.getTag() !=null) {
mListener.onSureListener(v);
}else{
mListener.onDiscardListener(v);
}
Dismiss(v,BaseNoticeWindow.TYPE_DISMISS_BUTTON);
}
private voidDismiss(View v, intnType) {
if(null!=mListener) {
mListener.onDismissListener(v,nType);
}
dismiss();
}
}
5.總結
對于在代碼里面寫view,可能有些新手會覺得看上去有點吃力,最簡單直接的方法就是,把代碼里的view弄成xml布局,這樣就會更加方便直接。
轉(zhuǎn)載請注明轉(zhuǎn)自:http://www.itdecent.cn/p/874a8736cbd0
csdn博客:http://blog.csdn.net/u011176685/article/details/51546404
demo下載地址:http://download.csdn.net/detail/u011176685/9536658?