編輯:關於Android編程
#####然而就先特麼扯個犢子…#####
* 其實,關於android的自定義dialog網絡上很多文章。我也不知道我這篇會不會特別點~ 小渣渣我只想寫點個人感覺有意義的東西。 (其實也是不知道寫啥啦,歡迎大家有想了解的知識點、或者想法可以私信或 者留言給本渣~ 個人感覺有意義的有興趣的就寫出來~hhhhhh ) 不扯犢子了…感覺扯犢子會被打…
大概就是:
提高可維護性. 代碼結構思路清晰點,不會像狗皮膏藥黏在一團. 個人感覺可控性蠻高. 然後自己感覺下吧……首先,dialog這個玩意兒我們還是很經常用到的,不同的需求可能涉及不一樣的
dialog,所以咱寫一個自定義
dialog的父類,父類就一個很普通
dialog嘛,然後,為人基本准則給你了,兒子你愛咋整咋整吧。恩的,把兒子放養去~你啥功能自己搞去,爹爹我只要你還是個人(
dialog)就好了!
就按著這個思路咱敲代碼去!
示例,一個支付時需要輸入密碼的一個對話框,需要顯示交易金額,輸入密碼框。
4、代碼
*前面說的都是打屁,還挺悠長的~言歸正傳代碼走起來~
1、首先按照思路,我們不能像平常寫自定義Dialog一般,一股腦的吧嗒吧嗒的鞋寫出來.所以先寫一個Dialog的父類。
☆☆☆☆☆
* 既然是父類,所以我們新建個抽象類。我這邊就取名叫做BaseDialog了.(其實寫完這個基本類這篇文章就GG了)
public abstract class BaseDialog {
//這些屬性,Context 是肯定要的,基本對話框要用它
protected Context context;
private Display display;//這個設置顯示屬性用的
private Dialog dialog;//自定義Dialog,Dialog還是要有一個的吧
//對話框布局的樣式ID (通過這個抽象方法,我們可以給不同的對話框設置不同樣式主題)
protected abstract int getDialogStyleId();
//構建對話框的方法(都說了是不同的對話框,布局什麼的肯定是不一樣的)
protected abstract View getView();
//構造方法 來實現 最基本的對話框
public BaseDialog(Context context) {
this.context = context;
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
display = windowManager.getDefaultDisplay();
//在這裡初始化 基礎對話框s
if (getDialogStyleId() == 0){
dialog = new Dialog(context, DIALOG_COMMON_STYLE );
}else {
dialog = new Dialog(context, getDialogStyleId());
}
// 調整dialog背景大小
getView().setLayoutParams(new FrameLayout.LayoutParams((int) (display.getWidth() * 0.8), LinearLayout.LayoutParams.WRAP_CONTENT));
dialog.setContentView(getView());
//隱藏系統輸入盤
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
/** * Dialog 的基礎方法,
*凡是要用的就在這寫出來,然後直接用對話框調本來的方法就好了,不夠自己加~hhh */
//像這類設置對話框屬性的方法,就返回值寫自己,這樣就可以一條鏈式設置了
public BaseDialog setCancelable(boolean cancel) {
dialog.setCancelable(cancel);
return this;
}
public void show() {
dialog.show();
}
public void dismiss(){
dialog.dismiss();
}
public boolean isShowing(){
return dialog.isShowing();
}
public BaseDialog setdismissListeren(DialogInterface.OnDismissListener dismissListener){
dialog.setOnDismissListener(dismissListener);
return this;
}
}
上面有倆個樣式,樣式的話寫在res/values/styles.xml中.
*最重要的父類就寫好了~然後,所有的自定義對話框繼承他,實現自己的方法就好了~~~
2、然後咱寫一個自定義的支付確認對話框.(這只是個例子,愛咋玩,自己寫去,小渣渣比較懶。。就舉這一個例子啦QAQ,其實覺得舉太多也沒什麼卵用)
public class PassWordDialog extends BaseDialog {
//這些屬性無視就好了,就是布局的控件
private TextView btnDialogPwdTitle;
private TextView tvDialogPwdTitle;
private LinearLayout layoutDialogPwdMoney;
private EditText etDialogPwd;
private LinearLayout layoutDialogPwd;
private RelativeLayout layoutPwd;
private TextView tvDialogPwdMoney;
//構造方法還是要的哈
public PassWordDialog(Context context) { super(context);}
//設置對話框的樣式
@Override
protected int getDialogStyleId() {
return BaseDialog.DIALOG_COMMON_STYLE;
}
//繼承於BaseDialog的方法,設置布局用的,這樣對話框張啥樣久隨心所欲啦
@Override
protected View getView() {
// 獲取Dialog布局
View view = LayoutInflater.from(context).inflate(R.layout.dialog_pwd, null);
//得到各種view
layoutPwd= ViewUtility.findViewById(view,R.id.rl_dialog_pwd);
tvDialogPwdMoney = ViewUtility.findViewById(view, R.id.tv_dialog_pwd_money);
btnDialogPwdTitle = ViewUtility.findViewById(view,R.id.btn_dialog_pwd_title);
tvDialogPwdTitle = ViewUtility.findViewById(view,R.id.tv_dialog_pwd_title);
layoutDialogPwdMoney = ViewUtility.findViewById(view,R.id.layout_dialog_pwd_money);
etDialogPwd = ViewUtility.findViewById(view,R.id.et_dialog_pwd);
layoutDialogPwd = ViewUtility.findViewById(view,R.id.layout_dialog_pwd);
//初始化一些控件的方法(放下面寫啦~)
initViewEvent();
return view;
}
}
上面這個類需要的元素在補一下。一個是布局文件(怎麼排版看個人心意了),一個是初始化一些個人覺得所需要的控件監聽.
先貼下監聽事件的方法.
//View的事件
private void initViewEvent() {
//設置對話框那個叉叉的方法,點擊關閉對話框
btnDialogPwdTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
可能需求是,需要根據用戶輸入的金額在對話框顯示支付金額,好的,so easy那就給個設置金額的方法.
/** * 設置金額 */
public BaseDialog setMoney(String s){
tvDialogPwdMoney.setText(s);
return this;
}
如果實在需要用到對話框裡的控件.
/** * 得到密碼框 */
public EditText getEditText(){
return etDialogPwd;
}
然後……想咋玩?你說,然後該咋整咋整好不.
最後貼個布局文件.
4、引用
* 對話框已經寫好了,調用方面那就真JB爽歪了.
public void showDialog(View view){
//恩,對的,就這麼一行代碼就夠了,因為設置屬性的方法返回值是自己,所以一條鏈就點好了
new PassWordDialog(this).setMoney("10").setCancelable(false).show();
}
這是谷歌官方給我們提供的一個兼容低版本安卓設備的軟件包,裡面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我們可以做很多事情,從最簡
在平時開發應用的時候,經常會遇到列表排序、滑動刪除的需求。如果列表效果采用的是 ListView 的話,需要經過自定義 View 才能實現效果;但是如果采用的是 Recy
之前跟大家介紹一個Alibaba的框架dexposed框架,此框架能夠動態的從線上完成一些補丁的工作。但是,由於它的性能和兼容性(不支持ART)所以,很多朋
吸引用戶的眼球,是我們至死不渝的追求;第一時間呈現最有價值的信息,簡明大方,告訴客戶,你的選擇是多麼的明智,這正是你尋覓已久的東西。分組的應用場合還是很多的,有數據集合的