欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android UI設(shè)計系列之自定義Dialog實現(xiàn)各種風(fēng)格的對話框效果(7)

 更新時間:2016年06月06日 11:46:33   作者:llew2011  
這篇文章主要介紹了Android UI設(shè)計系列之自定義Dialog實現(xiàn)各種風(fēng)格的對話框效果,具有一定的實用性和參考價值,感興趣的小伙伴們可以參考一下

雖然Android給我們提供了眾多組件,但是使用起來都不是很方便,我們開發(fā)的APK都有自己的風(fēng)格,如果使用了系統(tǒng)自帶的組件,總是覺得和應(yīng)用的主題不著邊際并且看起來也不順心,那我們就需要自定義了,為了方便大家對自定義組件的學(xué)習(xí),我接下來準(zhǔn)備了幾遍有關(guān)自定義的Dialog的文章,希望對大家有幫助。
在開發(fā)APK中最常見的估計就數(shù)彈出對話框了,這種對話框按照按鈕數(shù)量來分大致是三種:一個按鈕,兩個按鈕,三個按鈕。現(xiàn)在要講的就是按照按鈕數(shù)量分為以上三類吧(當(dāng)然了可以有更多的按鈕,只要你愿意)。
自定義Dialog對話大致可分為三步走吧:第一步就是重新定義Dialog的樣式,第二部就是定義我們需要顯示的布局文件,第三部就是設(shè)置事件監(jiān)聽器。
好了,還是老規(guī)矩,首先貼上工程目錄:

在工程中我定義了一個基類BaseBean,這個類用來作為在整個工程項目中的基類,基類中定義一些公共的常用的屬性,如有需要另外屬性我們只需要繼承基類就好了,所以我定義了DialogBean,它繼承了BaseBean,因此擁有了BaseBean的所有功能。那我們先看看BaseBean中定義的都是啥吧:

public class BaseBean { 
 
  /** 
   * 標(biāo)題 
   */ 
  String title; 
  /** 
   * 內(nèi)容 
   */ 
  String content; 
 
  /** 
   * 獲取標(biāo)題 
   * 
   * @return 標(biāo)題 
   */ 
  public String getTitle() { 
    return title; 
  } 
 
  /** 
   * 設(shè)置標(biāo)題 
   * 
   * @param title 
   *      標(biāo)題 
   */ 
  public void setTitle(String title) { 
    this.title = title; 
  } 
 
  /** 
   * 獲取內(nèi)容 
   * 
   * @return 內(nèi)容 
   */ 
  public String getContent() { 
    return content; 
  } 
 
  /** 
   * 設(shè)置內(nèi)容 
   * 
   * @param content 
   *      內(nèi)容 
   */ 
  public void setContent(String content) { 
    this.content = content; 
  } 
} 

以上是基類中的內(nèi)容,那接下來就看看Dialog中是怎么定義的吧:

public class DialogBean extends BaseBean { 
 
  /** 
   * 點擊返回鍵是否可消失 
   */ 
  boolean cancelable; 
  /** 
   * 點擊蒙皮是否可以消失 
   */ 
  boolean outCancelable; 
  /** 
   * 事件監(jiān)聽 
   */ 
  DialogClickListener listener; 
  /** 
   * 按鈕類型【默認(rèn)顯示兩個按鈕】 
   */ 
  DialogButtonType buttonType = DialogButtonType.TwoButton; 
 
  /** 
   * 顯示布局資源ID 
   */ 
  Integer layoutResID; 
 
  public DialogBean() { 
  } 
 
  /** 
   * 點擊BACK鍵是否可以消失 
   * 
   * @return 【true:可消失】【false:不消失】 
   */ 
  public boolean isCancelable() { 
    return cancelable; 
  } 
 
  /** 
   * 設(shè)置點擊BACK鍵是否可以消失 
   * 
   * @param cancelable 
   *      【true:可消失】【false:不消失】 
   */ 
  public void setCancelable(boolean cancelable) { 
    this.cancelable = cancelable; 
  } 
 
  /** 
   * 點擊蒙皮是否可以消失 
   * 
   * @return 【true:可消失】【false:不消失】 
   */ 
  public boolean isOutCancelable() { 
    return outCancelable; 
  } 
 
  /** 
   * 設(shè)置點擊蒙皮是否可以消失 
   * 
   * @param outCancelable 
   *      【true:可消失】【false:不消失】 
   */ 
  public void setOutCancelable(boolean outCancelable) { 
    this.outCancelable = outCancelable; 
  } 
 
  /** 
   * 獲取事件監(jiān)聽器 
   * 
   * @return 事件監(jiān)聽器 
   */ 
  public DialogClickListener getListener() { 
    return listener; 
  } 
 
  /** 
   * 設(shè)置事件監(jiān)聽器 
   * 
   * @param listener 
   *      事件監(jiān)聽器 
   */ 
  public void setListener(DialogClickListener listener) { 
    this.listener = listener; 
  } 
 
  /** 
   * 獲取按鈕類型 
   * 
   * @return 按鈕類型 
   */ 
  public DialogButtonType getButtonType() { 
    return buttonType; 
  } 
 
  /** 
   * 設(shè)置按鈕類型 
   * 
   * @param buttonType 
   *      按鈕類型 
   */ 
  public void setButtonType(DialogButtonType buttonType) { 
    this.buttonType = buttonType; 
  } 
 
  /** 
   * 獲取要顯示的布局ID 
   * 
   * @return 要顯示的布局ID 
   */ 
  public Integer getLayoutResID() { 
    return layoutResID; 
  } 
 
  /** 
   * 設(shè)置要顯示的布局ID 
   * 
   * @param layoutResID 
   *      要顯示的布局ID 
   */ 
  public void setLayoutResID(Integer layoutResID) { 
    this.layoutResID = layoutResID; 
  } 
 
  /** 
   * 按鈕類型 
   * 
   * @author llew 
   */ 
  public enum DialogButtonType { 
    /** 
     * 一個按鈕 
     */ 
    OneButton, 
    /** 
     * 兩個按鈕 
     */ 
    TwoButton, 
    /** 
     * 三個按鈕 
     */ 
    ThreeButton 
  } 
 
  /** 
   * 按鈕點擊監(jiān)聽器 
   * 
   * @author llew 
   * 
   */ 
  public interface DialogClickListener { 
    /** 
     * 點擊按鈕 
     * 
     * @param buttonIndex 
     *      按鈕下標(biāo)【從0開始】 
     */ 
    public void onClick(int buttonIndex); 
  } 
} 

DialogBean中的代碼注釋的都很詳細(xì)了,就不再多解釋了,主要就是封裝了對話框中常見的屬性。接下來就看看定義的所需要的Dialog的樣式吧:

<style name="theme_dialog_alert" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 

樣式主要定義了該對話框沒有標(biāo)題,背景顏色是透明的,現(xiàn)在所需的樣式定義完了,主角GlobleDialog該出場了,代碼如下:

public class GlobleDialog extends Dialog implements View.OnClickListener { 
 
  private TextView titleTextView, contentTextView; 
  private Button leftButton, centerButton ,rightButton; 
  private DialogBean bean; 
   
  public GlobleDialog(Context context, int theme, DialogBean bean) { 
    super(context, theme); 
    this.bean = bean; 
    initWedgits(); 
  } 
 
  /** 
   * 初始化各組件 
   */ 
  private void initWedgits() { 
    try { 
      setCancelable(bean.isCancelable()); 
      setCanceledOnTouchOutside(bean.isOutCancelable()); 
      View dialogView = getLayoutInflater().inflate(bean.getLayoutResID(), null); 
      titleTextView = (TextView) dialogView.findViewById(R.id.button_title); 
      contentTextView = (TextView) dialogView.findViewById(R.id.button_content); 
      titleTextView.setText(bean.getTitle()); 
      contentTextView.setText(bean.getContent()); 
      leftButton = (Button) dialogView.findViewById(R.id.button_left); 
      centerButton = (Button) dialogView.findViewById(R.id.button_center); 
      rightButton = (Button) dialogView.findViewById(R.id.button_right); 
       
      leftButton.setOnClickListener(this); 
      centerButton.setOnClickListener(this); 
      rightButton.setOnClickListener(this); 
       
      if(DialogButtonType.OneButton == bean.getButtonType()) { 
        leftButton.setVisibility(View.GONE); 
        rightButton.setVisibility(View.GONE); 
      } else if(DialogButtonType.TwoButton == bean.getButtonType()) { 
        centerButton.setVisibility(View.GONE); 
      } 
      setContentView(dialogView); 
       
      Window dialogWindow = getWindow(); 
      WindowManager.LayoutParams lp = dialogWindow.getAttributes(); 
      dialogWindow.setGravity(Gravity.CENTER); 
      DisplayMetrics dm = new DisplayMetrics(); 
      dialogWindow.getWindowManager().getDefaultDisplay().getMetrics(dm); 
      lp.width = dm.widthPixels - 20; 
      dialogWindow.setAttributes(lp); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
 
  @Override 
  public void onClick(View v) { 
    try { 
      switch (v.getId()) { 
      case R.id.button_left: 
        bean.getListener().onClick(0); 
        break; 
      case R.id.button_center: 
        bean.getListener().onClick(1); 
        break; 
      case R.id.button_right: 
        bean.getListener().onClick(2); 
        break; 
      default: 
        break; 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
 
} 

自定義的GlobleDialog的代碼寫完了,那就看看是如何使用的吧:

package com.llew.e.dialog.view.activity; 
 
import android.app.Activity; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.TextView; 
import android.widget.Toast; 
 
import com.llew.e.dialog.R; 
import com.llew.e.dialog.view.bean.DialogBean; 
import com.llew.e.dialog.view.bean.DialogBean.DialogButtonType; 
import com.llew.e.dialog.view.bean.DialogBean.DialogClickListener; 
import com.llew.e.dialog.view.wedgit.GlobleDialog; 
 
public class MainActivity extends Activity { 
  /** Called when the activity is first created. */ 
   
  private Dialog dialog; 
  private TextView textView; 
   
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    textView = (TextView) findViewById(R.id.textview); 
    textView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        DialogBean dialogBean = new DialogBean(); 
        dialogBean.setCancelable(true); 
        dialogBean.setOutCancelable(true); 
        dialogBean.setTitle("小練習(xí)"); 
        dialogBean.setContent("在這里輸入提示信息"); 
        dialogBean.setButtonType(DialogButtonType.TwoButton); 
        dialogBean.setLayoutResID(R.layout.dialog_common); 
        dialogBean.setListener(new DialogClickListener() { 
          @Override 
          public void onClick(int buttonIndex) { 
            switch (buttonIndex) { 
            case 0: 
              Toast.makeText(MainActivity.this, "點擊了播放", Toast.LENGTH_SHORT).show(); 
              break; 
            case 1: 
              Toast.makeText(MainActivity.this, "點擊了暫停", Toast.LENGTH_SHORT).show(); 
              break; 
            case 2: 
              Toast.makeText(MainActivity.this, "點擊了停止", Toast.LENGTH_SHORT).show(); 
              break; 
            default: 
              break; 
            } 
          } 
        }); 
        createDialog(dialogBean); 
      } 
    }); 
  } 
   
  public void createDialog(DialogBean bean) { 
    if(null == dialog) { 
      dialog = new GlobleDialog(MainActivity.this, R.style.theme_dialog_alert, bean); 
    } 
    dialog.show(); 
  } 
} 

代碼實在是沒有什么好解釋的,我相信你一看就會,那看看運行效果吧:

界面看上去有點丑,大家可以自己修改顏色值或者使用圖片代替。

好了,到這里自定義Dialog實現(xiàn)不同風(fēng)格效果的對話框就講解完了,謝謝大家的閱讀。

源碼下載:Android UI設(shè)計實現(xiàn)各種風(fēng)格的對話框效果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android實現(xiàn)ImageView圖片雙擊放大及縮小

    Android實現(xiàn)ImageView圖片雙擊放大及縮小

    這篇文章主要介紹了Android實現(xiàn)ImageView圖片雙擊放大及縮小的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android Bitmap的加載與緩存

    Android Bitmap的加載與緩存

    這篇文章主要介紹了Android Bitmap的加載與緩存的相關(guān)資料,需要的朋友可以參考下
    2018-03-03
  • Android多渠道打包的方法步驟

    Android多渠道打包的方法步驟

    本篇文章主要介紹了Android多渠道打包的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Android使用addView動態(tài)添加組件的方法

    Android使用addView動態(tài)添加組件的方法

    這篇文章主要為大家詳細(xì)介紹了Android使用addView動態(tài)添加組件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android百度地圖添加Marker失真問題的解決方案

    Android百度地圖添加Marker失真問題的解決方案

    本篇文章主要介紹了Android百度地圖添加Marker失真問題的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android中制作自定義dialog對話框的實例分享

    Android中制作自定義dialog對話框的實例分享

    這篇文章主要介紹了Android中制作自定義dialog對話框的實例分享,安卓自帶的Dialog顯然不夠用,因而我們要繼承Dialog類來制作自己的對話框,需要的朋友可以參考下
    2016-04-04
  • Android 管理Activity中的fragments

    Android 管理Activity中的fragments

    為了管理Activity中的fragments,需要使用FragmentManager,為了得到它,需要調(diào)用Activity中的getFragmentManager()方法,接下來詳細(xì)介紹,感興趣的朋友可以了解下哦
    2013-01-01
  • Android入門之ProgressBar的使用教程

    Android入門之ProgressBar的使用教程

    Android里的ProgressBar默認(rèn)為一個不斷轉(zhuǎn)圈的圓,它也可以自定義。這篇文章主要通過示例和大家介紹下ProgressBar的使用,感興趣的可以了解一下
    2022-11-11
  • Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法【附源碼下載】

    Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法【附源碼下載】

    這篇文章主要介紹了Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法,結(jié)合實例形式分析了Android橫向列表GridView實現(xiàn)橫向滾動的相關(guān)布局與功能實現(xiàn)技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下
    2018-01-01
  • Android無需權(quán)限調(diào)起系統(tǒng)相機

    Android無需權(quán)限調(diào)起系統(tǒng)相機

    在進行一些小型APP的開發(fā),或者是對拍照界面沒有自定義要求時,我們可以用調(diào)起系統(tǒng)相機的方式快速完成拍照需求
    2023-03-03

最新評論