Android自定義對(duì)話框的簡(jiǎn)單實(shí)現(xiàn)
本文實(shí)例為大家分享了Android自定義對(duì)話框的具體實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下
1、定義對(duì)話框的布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ? android:layout_width="match_parent" ? ? android:layout_height="match_parent"> ? ? <TextView ? ? ? ? android:id="@+id/title" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:gravity="center" ? ? ? ? android:textSize="16sp" ? ? ? ? android:layout_margin="4dp" ? ? ? ? android:text="標(biāo)題"/> ? ? <TextView ? ? ? ? android:id="@+id/content1" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:textSize="14sp" ? ? ? ? android:text="第一行文字" ? ? ? ? android:layout_margin="4dp" ? ? ? ? android:layout_below="@id/title" ? ? ? ? android:gravity="center"/> ? ? <TextView ? ? ? ? android:id="@+id/content2" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:textSize="14sp" ? ? ? ? android:text="第一行文字" ? ? ? ? android:layout_margin="4dp" ? ? ? ? android:layout_below="@id/content1" ? ? ? ? android:gravity="center"/> ? ? <LinearLayout ? ? ? ? android:id="@+id/linear" ? ? ? ? android:layout_below="@id/content2" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:orientation="horizontal" ? ? ? ? android:layout_marginTop="6dp" ? ? ? ? android:paddingRight="20dp" ? ? ? ? android:paddingLeft="20dp" ? ? ? ? > ? ? ? ? <Button ? ? ? ? ? ? android:id="@+id/ok" ? ? ? ? ? ? android:layout_width="match_parent" ? ? ? ? ? ? android:layout_height="wrap_content" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:gravity="center" ? ? ? ? ? ? android:textSize="14sp" ? ? ? ? ? ? android:text="確定"/> ? ? ? ? <Button ? ? ? ? ? ? android:id="@+id/cancel" ? ? ? ? ? ? android:layout_width="match_parent" ? ? ? ? ? ? android:layout_height="wrap_content" ? ? ? ? ? ? android:layout_weight="1" ? ? ? ? ? ? android:gravity="center" ? ? ? ? ? ? android:textSize="14sp" ? ? ? ? ? ? android:text="取消"/> ? ? </LinearLayout> ? ? <Button ? ? ? ? android:id="@+id/know" ? ? ? ? android:layout_below="@id/linear" ? ? ? ? android:gravity="center" ? ? ? ? android:layout_marginTop="10dp" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:textSize="14sp" ? ? ? ? android:text="知道了"/> </RelativeLayout>
對(duì)話框樣式(比較丑哈,就是大概這個(gè)意思,嘿嘿)
2、定義接口
利用接口回調(diào)的方式使對(duì)話框消失。
public interface DialogListener { ? ? void onClick(MyDialog dialog,View view); }
3、寫(xiě)一個(gè)類繼承Dialog,并重寫(xiě)構(gòu)造方法
說(shuō)明:第三個(gè)按鈕的監(jiān)聽(tīng)與其他兩個(gè)不同,前兩個(gè)使用的是button原聲的監(jiān)聽(tīng)事件,第三個(gè)為自定義的接口,目的是獲取MyDialog,然后通過(guò)dismiss()方法使對(duì)話框不顯示。(接口回調(diào)的方式)
public class MyDialog extends Dialog { ? ? private TextView mTipOneView; ? ? private TextView mTipTwoView; ? ? private TextView mTitleView; ? ? private Button mOkView; ? ? private Button mCancelView; ? ? private Button mKonwView; ? ? private View.OnClickListener mOkListener; ? ? private View.OnClickListener mCancelListener; ? ? private DialogListener mKnowListener; ? ? private String title; ? ? private String oneTip; ? ? private String twoTip; ? ? private void setOnDialogListener(DialogListener listener){ ? ? ? ? this.mKnowListener = listener; ? ? } ? ? public MyDialog(Context context) { ? ? ? ? super(context); ? ? } ? ? public MyDialog(Context context,String title,String oneTip,String twoTip,View.OnClickListener ok,View.OnClickListener cancel,DialogListener know) { ? ? ? ? this(context); ? ? ? ? this.title = title; ? ? ? ? this.oneTip = oneTip; ? ? ? ? this.twoTip = twoTip; ? ? ? ? mOkListener = ok; ? ? ? ? mCancelListener = cancel; ? ? ? ? mKnowListener = know; ? ? } ? ? @Override ? ? protected void onCreate(Bundle savedInstanceState) { ? ? ? ? super.onCreate(savedInstanceState); ? ? ? ? setContentView(R.layout.layout_dialog); ? ? ? ? mCancelView = (Button) findViewById(R.id.cancel); ? ? ? ? mOkView = (Button) findViewById(R.id.ok); ? ? ? ? mKonwView = (Button) findViewById(R.id.know); ? ? ? ? mTipOneView = (TextView) findViewById(R.id.content1); ? ? ? ? mTipTwoView = (TextView) findViewById(R.id.content2); ? ? ? ? mTitleView = (TextView) findViewById(R.id.title); ? ? ? ? mTitleView.setText(title); ? ? ? ? mTipTwoView.setText(twoTip); ? ? ? ? mTipOneView.setText(oneTip); ? ? ? ? mCancelView.setOnClickListener(mCancelListener); ? ? ? ? mOkView.setOnClickListener(mOkListener); ? ? ? ? mKonwView.setOnClickListener(new View.OnClickListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void onClick(View view) { ? ? ? ? ? ? ? ? mKnowListener.onClick(MyDialog.this,view); ? ? ? ? ? ? } ? ? ? ? }); ? ? } }
通過(guò)setViewContent(R.layout.~)為對(duì)話框設(shè)置樣式;使用構(gòu)造方法傳值。
4、顯示對(duì)話框
public class CustomDialogActivity extends AppCompatActivity { ? ? private DialogListener listener; ? ? private MyDialog myDialog; ? ? @Override ? ? protected void onCreate(Bundle savedInstanceState) { ? ? ? ? super.onCreate(savedInstanceState); ? ? ? ? setContentView(R.layout.activity_custom_dialog); ? ? ? ? listener = new DialogListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void onClick(MyDialog dialog, View view) { ? ? ? ? ? ? ? ? myDialog.dismiss(); ? ? ? ? ? ? } ? ? ? ? }; ? ? } ? ? public void showDialog(View view){ ? ? ? ? ?myDialog = new MyDialog(CustomDialogActivity.this, "不知道", "有問(wèn)題么", "啥問(wèn)題", new View.OnClickListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void onClick(View view) { ? ? ? ? ? ? ? ? Log.e("----->", "ok"); ? ? ? ? ? ? ? ? //點(diǎn)擊按鈕發(fā)生的事件 ? ? ? ? ? ? } ? ? ? ? }, new View.OnClickListener() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void onClick(View view) { ? ? ? ? ? ? ? ? Log.e("----->", "cancle"); ? ? ? ? ? ? ? ? //點(diǎn)擊按鈕發(fā)生的事件 ? ? ? ? ? ? } ? ? ? ? },listener); ? ? ? ? myDialog.show(); ? ? } }
注意:一定不要忘了show(),否則對(duì)話框不顯示。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android入門(mén)之彈出式對(duì)話框的實(shí)現(xiàn)
- Android入門(mén)之利用Spinner實(shí)現(xiàn)彈出選擇對(duì)話框
- Android對(duì)話框使用方法詳解
- 五分了解Android?Progress?Bar進(jìn)度條加載
- Android開(kāi)發(fā)基礎(chǔ)使用ProgressBar加載進(jìn)度條示例
- Android自定義View實(shí)現(xiàn)進(jìn)度條動(dòng)畫(huà)
- Android實(shí)現(xiàn)簡(jiǎn)單實(shí)用的垂直進(jìn)度條
- android實(shí)現(xiàn)簡(jiǎn)單進(jìn)度條ProgressBar效果
- Jetpack Compose實(shí)現(xiàn)對(duì)話框和進(jìn)度條實(shí)例解析
相關(guān)文章
Android源代碼倉(cāng)庫(kù)及其管理工具Repo分析詳解
本篇文章主要介紹了Android源代碼倉(cāng)庫(kù)及其管理工具Repo分析詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Android 使用ViewPager實(shí)現(xiàn)圖片左右循環(huán)滑動(dòng)自動(dòng)播放
這篇文章主要介紹了Android 使用ViewPager實(shí)現(xiàn)圖片左右循環(huán)滑動(dòng)自動(dòng)播放的相關(guān)資料,非常不錯(cuò),具有參考解決價(jià)值,需要的朋友可以參考下2016-08-08Android ViewPager實(shí)現(xiàn)輪播圖效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)輪播圖效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android 給圖片加上水印的示例代碼(支持logo+文字)
本篇文章主要介紹了Android 給圖片加上水印的示例代碼(支持logo+文字),具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08Android Canvas和Bitmap結(jié)合繪圖詳解流程
在 Android Canvas 上繪圖非常難,在繪圖時(shí)需要理解許多不同的類和概念。這篇文章中,將介紹 Android 框架中可用的一些類,它們可以讓畫(huà)布使用時(shí)更輕松2021-11-11android 調(diào)用系統(tǒng)的照相機(jī)和圖庫(kù)實(shí)例詳解
android手機(jī)有自帶的照相機(jī)和圖庫(kù),我們做的項(xiàng)目中有時(shí)用到上傳圖片到服務(wù)器,今天做了一個(gè)項(xiàng)目用到這個(gè)功能,所以把我的代碼記錄下來(lái)和大家分享,有需求的朋友可以參考下2012-12-12解決android6.0以上不能讀取外部存儲(chǔ)權(quán)限的問(wèn)題
今天小編就為大家分享一篇解決android6.0以上不能讀取外部存儲(chǔ)權(quán)限的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Android應(yīng)用開(kāi)發(fā)中CardView的初步使用指南
這篇文章主要介紹了Android應(yīng)用開(kāi)發(fā)中CardView的初步使用指南,CardView主要處理一些卡片型的視圖布局,需要的朋友可以參考下2016-02-02