日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android高仿IOS和QQ的弹出对话框

發(fā)布時間:2025/3/20 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android高仿IOS和QQ的弹出对话框 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? 我們知道Android中其實并不提供圓形的東西,像Button,TextView,EditView等等都是沒有弧形元素在里面(看看這些控件的屬性就知道了)。而很多時候我們的程序中又需要用到這樣有弧形元素的控件,當然我們著先肯定會想到用圖片去遮蓋,例如我們要一個圓形的圖片,我們可以在原有圖片的基礎(chǔ)上加上一個中間為空的圖片。這樣就可以獲得圓形圖片的效果。不過,這樣方法一看就可以水平比較低的。因為要用這樣的一張圖片,勢必消耗資源。不過,如果我們是要去實現(xiàn)一個非常不規(guī)則的圖形時,這里,我們可以去采用圖片覆蓋的方法。言歸正傳,其實要獲得圓形圖片的方法我們可以去畫,在以后我更新博客來講解這個問題。

我們來看一下這個仿IOS或是QQ的自定義的Dialog究竟長什么樣子。如下:


再來看看Android原生的Dialog長什么樣子,如下:


這里我只截取了屏幕的一部分來展示,自定義的Dialog顯而易見。

我們可以這樣來思考,要實現(xiàn)這樣一個效果,那它應(yīng)該是一個Dialog。因為我們是要讓它彈出來(說實話,如果你非要把整個搞一個Activity或是Fragment,然后設(shè)置背景透明,這樣可以!不過不建議)。

于是我們知道,我們的CustomDialog要去繼承Android原生的Dialog,而同時又必須去重寫里面的方法。像setPositiveButton(...),setNegativeButton(...),create()等。不過,show()方法不用重寫,這里我感覺應(yīng)該是和Toast中的show()的原理一樣,只是將我們的Dialog加入到系統(tǒng)的Dialog隊列中(當然也可能不是)。重寫其方法的關(guān)鍵代碼如下:

public Builder setContentView(View v) {this.contentView = v;return this;}public Builder setPositiveButton(int confirm_btnText,DialogInterface.OnClickListener listener) {this.confirm_btnText = (String) context.getText(confirm_btnText);this.confirm_btnClickListener = listener;return this;}public Builder setPositiveButton(String confirm_btnText,DialogInterface.OnClickListener listener) {this.confirm_btnText = confirm_btnText;this.confirm_btnClickListener = listener;return this;}public Builder setNegativeButton(int cancel_btnText,DialogInterface.OnClickListener listener) {this.cancel_btnText = (String) context.getText(cancel_btnText);this.cancel_btnClickListener = listener;return this;}public Builder setNegativeButton(String cancel_btnText,DialogInterface.OnClickListener listener) {this.cancel_btnText = cancel_btnText;this.cancel_btnClickListener = listener;return this;}public CustomDialog create() {LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// instantiate the dialog with the custom Themefinal CustomDialog dialog = new CustomDialog(context, R.style.mystyle);View layout = inflater.inflate(R.layout.customdialog, null);dialog.addContentView(layout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));// set the dialog title((TextView) layout.findViewById(R.id.title)).setText(title);((TextView) layout.findViewById(R.id.title)).getPaint().setFakeBoldText(true);;// set the confirm buttonif (confirm_btnText != null) {((Button) layout.findViewById(R.id.confirm_btn)).setText(confirm_btnText);if (confirm_btnClickListener != null) {((Button) layout.findViewById(R.id.confirm_btn)).setOnClickListener(new View.OnClickListener() {public void onClick(View v) {confirm_btnClickListener.onClick(dialog,DialogInterface.BUTTON_POSITIVE);}});}} else {// if no confirm button just set the visibility to GONElayout.findViewById(R.id.confirm_btn).setVisibility(View.GONE);}// set the cancel buttonif (cancel_btnText != null) {((Button) layout.findViewById(R.id.cancel_btn)).setText(cancel_btnText);if (cancel_btnClickListener != null) {((Button) layout.findViewById(R.id.cancel_btn)).setOnClickListener(new View.OnClickListener() {public void onClick(View v) {cancel_btnClickListener.onClick(dialog,DialogInterface.BUTTON_NEGATIVE);}});}} else {// if no confirm button just set the visibility to GONElayout.findViewById(R.id.cancel_btn).setVisibility(View.GONE);}// set the content messageif (message != null) {((TextView) layout.findViewById(R.id.message)).setText(message);} else if (contentView != null) {((LinearLayout) layout.findViewById(R.id.message)).removeAllViews();((LinearLayout) layout.findViewById(R.id.message)).addView(contentView, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));}dialog.setContentView(layout);return dialog;} 使用的方法其實和我們使用AlertDialog的方法差不多,如下:

CustomDialog.Builder builder = new Builder(MainActivity.this); builder.setTitle(R.string.prompt); builder.setMessage(R.string.exit_app); builder.setPositiveButton(R.string.confirm, dialogButtonClickListener); builder.setNegativeButton(R.string.cancel, dialogButtonClickListener); builder.create().show(); 同原生Dialog一樣,這里的自定義Dialog不僅可以顯示提示信息,其實它可以顯示任何你想要顯示的信息。關(guān)鍵是這里的builder.setMessage(R.string.exit_app);,這里的setMessage(...)的參數(shù)只是字符串,我們可以給它傳一個對象,任何你想要傳給它的對象。例如下圖所示:


圖中用紅色標出的地方,是一個Layout,我們可以創(chuàng)建一個Model,類似Java中bean,這個Model里有各種我們需要顯示的信息,以作為這個Model的成員。

如下是程序MainActivity的全部代碼,在此貼出代碼的原因是這里的MainActivity和我的工程中的MainActivity的代碼有不一樣的地方,主要是有關(guān)于確定和取消按鈕的點擊監(jiān)聽事件。

public class MainActivity extends Activity implements OnClickListener{private Button ios_dialog_btn,android_dialog_btn;private Toast mToast;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ios_dialog_btn = (Button) findViewById(R.id.ios_dialog_btn);android_dialog_btn = (Button) findViewById(R.id.android_dialog_btn);ios_dialog_btn.setOnClickListener(this);android_dialog_btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.ios_dialog_btn:CustomDialog.Builder builder = new Builder(MainActivity.this);builder.setTitle(R.string.prompt);builder.setMessage(R.string.exit_app);builder.setPositiveButton(R.string.confirm, dialogButtonClickListener);builder.setNegativeButton(R.string.cancel, dialogButtonClickListener);builder.create().show();break;case R.id.android_dialog_btn:AlertDialog.Builder mbuilder = new AlertDialog.Builder(MainActivity.this);mbuilder.setTitle(R.string.prompt);mbuilder.setMessage(R.string.exit_app);mbuilder.setPositiveButton(R.string.confirm, dialogButtonClickListener);mbuilder.setNegativeButton(R.string.cancel, dialogButtonClickListener);mbuilder.create().show();break;default:break;}}private void showToast(CharSequence message) {if (null == mToast) {mToast = Toast.makeText(this, message, Toast.LENGTH_SHORT);mToast.setGravity(Gravity.CENTER, 0, 0);} else {mToast.setText(message);}mToast.show();}private DialogInterface.OnClickListener dialogButtonClickListener = new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {switch (which) {case DialogInterface.BUTTON_POSITIVE:dialog.dismiss();showToast("你點擊了確定按鈕.");break;case DialogInterface.BUTTON_NEGATIVE:dialog.dismiss();showToast("你點擊了取消按鈕.");break;default:break;}}};}


工程代碼下載:http://download.csdn.net/detail/u013761665/8030735


總結(jié)

以上是生活随笔為你收集整理的Android高仿IOS和QQ的弹出对话框的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。