自定义Dialog
文章目錄
- 1、直接加載布局
- 1.1 項目層級
- 1.2 代碼
- (1)activity_main.xml
- (2)dialog.xml
- (3)MainActivity
- 1.3 效果圖
- 2、自定義Dialog
- 2.1 項目層級
- 2.2 代碼
- (1)styles.xml:給Dialog設置一個風格主題(基本都是用這個主題)無邊框全透明背景
- (2)activity_main.xml
- (3)dialog.xml:給自定的Dialog設置自定義的 xml界面
- (4)free_dialog_bg.xml: dialog的自定義背景框如下
- (5)MainActivity
- (6)SelfDialog:繼承Dialog實現自定義的Dialog
- (7)AndroidManifest.xml
- 2.3 效果圖
1、直接加載布局
1.1 項目層級
1.2 代碼
(1)activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.zz.dialogtest.MainActivity"><Buttonandroid:id="@+id/button_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:text="Button 1"/> </LinearLayout>(2)dialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="160dp"android:layout_height="150dp"android:text="MyDialog"android:textSize="25sp"android:gravity="center"android:textColor="#00ff00"/></LinearLayout>(3)MainActivity
package com.zz.dialogtest; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//直接創建dialogsetContentView(R.layout.activity_main);Button button1 = (Button) findViewById(R.id.button_1);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);builder.setView(view);builder.create().show();}});1.3 效果圖
2、自定義Dialog
2.1 項目層級
2.2 代碼
(1)styles.xml:給Dialog設置一個風格主題(基本都是用這個主題)無邊框全透明背景
<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style><!--自定義dialog背景全透明無邊框theme --><style name="MyDialog" parent="android:style/Theme.Dialog"><!--背景顏色及和透明程度--><item name="android:windowBackground">@android:color/transparent</item><!--是否去除標題 --><item name="android:windowNoTitle">true</item><!--是否去除邊框--><item name="android:windowFrame">@null</item><!--是否浮現在activity之上--><item name="android:windowIsFloating">true</item><!--是否模糊--><item name="android:backgroundDimEnabled">false</item></style></resources>(2)activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.zz.mydialog.MainActivity"><Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="自定義dialog"android:layout_marginTop="25dp"android:layout_gravity="center"/> </LinearLayout>(3)dialog.xml:給自定的Dialog設置自定義的 xml界面
<?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"android:background="#11ffffff"><LinearLayoutandroid:layout_width="260dp"android:layout_height="wrap_content"android:layout_centerInParent="true"android:background="@drawable/free_dialog_bg"android:orientation="vertical"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_margin="15dp"android:gravity="center"android:text="消息提示"android:textColor="#38ADFF"android:textSize="16sp" /><TextViewandroid:id="@+id/message"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:text="提示消息" /><Viewandroid:layout_width="match_parent"android:layout_height="1px"android:layout_marginTop="15dp"android:background="#E4E4E4" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:orientation="horizontal"><Buttonandroid:id="@+id/no"android:layout_width="0dp"android:layout_height="match_parent"android:layout_marginLeft="10dp"android:layout_weight="1"android:background="@null"android:gravity="center"android:singleLine="true"android:text="No"android:textColor="#7D7D7D"android:textSize="16sp" /><Viewandroid:layout_width="1px"android:layout_height="match_parent"android:background="#E4E4E4" /><Buttonandroid:id="@+id/yes"android:layout_width="0dp"android:layout_height="match_parent"android:layout_marginRight="10dp"android:layout_weight="1"android:background="@null"android:gravity="center"android:singleLine="true"android:text="Yes"android:textColor="#38ADFF"android:textSize="16sp" /></LinearLayout></LinearLayout></RelativeLayout>(4)free_dialog_bg.xml: dialog的自定義背景框如下
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><solid android:color="#ffffff" /><strokeandroid:width="0.8dp"android:color="#ffffff" /><!-- 圓角 --><corners android:radius="6dp" /> </shape>(5)MainActivity
package com.zz.mydialog;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast;public class MainActivity extends AppCompatActivity {private SelfDialog selfDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//按鈕點擊事件findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//設置Dialog對話框selfDialog = new SelfDialog(MainActivity.this);selfDialog.setTitle("提示");selfDialog.setMessage("確定退出應用?");//確定按鈕selfDialog.setYesOnclickListener("確定", new SelfDialog.onYesOnclickListener() {@Overridepublic void onYesClick() {Toast.makeText(MainActivity.this,"點擊了--確定--按鈕",Toast.LENGTH_LONG).show();selfDialog.dismiss(); //點擊按鈕后,Dialog對話框立刻消失}});//取消按鈕selfDialog.setNoOnclickListener("取消", new SelfDialog.onNoOnclickListener() {@Overridepublic void onNoClick() {Toast.makeText(MainActivity.this,"點擊了--取消--按鈕",Toast.LENGTH_LONG).show();selfDialog.dismiss(); //點擊按鈕后,Dialog對話框立刻消失}});selfDialog.show(); //顯示Dialog對話框}});} }(6)SelfDialog:繼承Dialog實現自定義的Dialog
package com.zz.mydialog;import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;/*** 創建自定義的dialog,主要學習其實現原理* Created by chengguo on 2016/3/22.*/ public class SelfDialog extends Dialog {private Button yes;//確定按鈕private Button no;//取消按鈕private TextView titleTv;//消息標題文本private TextView messageTv;//消息提示文本private String titleStr;//從外界設置的title文本private String messageStr;//從外界設置的消息文本//確定文本和取消文本的顯示內容private String yesStr, noStr;private onNoOnclickListener noOnclickListener;//取消按鈕被點擊了的監聽器private onYesOnclickListener yesOnclickListener;//確定按鈕被點擊了的監聽器/*** 設置取消按鈕的顯示內容和監聽** @param str* @param onNoOnclickListener*/public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {if (str != null) {noStr = str;}this.noOnclickListener = onNoOnclickListener;}/*** 設置確定按鈕的顯示內容和監聽** @param str* @param onYesOnclickListener*/public void setYesOnclickListener(String str, onYesOnclickListener onYesOnclickListener) {if (str != null) {yesStr = str;}this.yesOnclickListener = onYesOnclickListener;}public SelfDialog(Context context) {super(context, R.style.MyDialog);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dialog);//按空白處不能取消動畫setCanceledOnTouchOutside(false);//初始化界面控件initView();//初始化界面數據initData();//初始化界面控件的事件initEvent();}/*** 初始化界面的確定和取消監聽器*/private void initEvent() {//設置確定按鈕被點擊后,向外界提供監聽yes.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (yesOnclickListener != null) {yesOnclickListener.onYesClick();}}});//設置取消按鈕被點擊后,向外界提供監聽no.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (noOnclickListener != null) {noOnclickListener.onNoClick();}}});}/*** 初始化界面控件的顯示數據*/private void initData() {//如果用戶自定了title和messageif (titleStr != null) {titleTv.setText(titleStr);}if (messageStr != null) {messageTv.setText(messageStr);}//如果設置按鈕的文字if (yesStr != null) {yes.setText(yesStr);}if (noStr != null) {no.setText(noStr);}}/*** 初始化界面控件*/private void initView() {yes = (Button) findViewById(R.id.yes);no = (Button) findViewById(R.id.no);titleTv = (TextView) findViewById(R.id.title);messageTv = (TextView) findViewById(R.id.message);}/*** 從外界Activity為Dialog設置標題** @param title*/public void setTitle(String title) {titleStr = title;}/*** 從外界Activity為Dialog設置dialog的message** @param message*/public void setMessage(String message) {messageStr = message;}/*** 設置確定按鈕和取消被點擊的接口*/public interface onYesOnclickListener {public void onYesClick();}public interface onNoOnclickListener {public void onNoClick();} }(7)AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.zz.mydialog"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>2.3 效果圖
參考:https://www.cnblogs.com/holyday/p/7284394.html
總結
- 上一篇: Android(六)——Android第
- 下一篇: Dialog练习