亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析Android中常見三種彈框在項目中的應(yīng)用

 更新時間:2017年03月07日 17:13:50   作者:天一方藍(lán)  
這篇文章主要介紹了淺析Android中常見三種彈框在項目中的應(yīng)用,需要的朋友可以參考下

一丶概述

彈框在Android項目中經(jīng)常出現(xiàn),常見的實(shí)現(xiàn)方法有三種:Dialog 彈框,Window彈框,Activity偽彈框。本文就說一說三種彈框的實(shí)現(xiàn)及在項目中的運(yùn)用。

二丶演示圖

       

圖一為常見的三種彈框(文末上鏈接),圖二為項目中用到的Activity偽彈框

三丶正文

1.Dialog彈框

先看一篇一篇文章:

android 8種對話框(Dialog)使用方法匯總

Dialog是系統(tǒng)自帶的彈框,然而常常因為UI不好看而遭嫌棄,常需要自定義

public class MyDialog extends Dialog implements android.view.View.OnClickListener {
  private Context mContext;
  private String mTitle;
  private String mDetail;
  private TextView mTextTitle;
  private TextView mTextDetail;
  private TextView mButtonYes;
  private TextView mButtonNo;
  private onClickInterface mOnclClickInterface;
  public MyDialog(Context context, String title, String detail) {
    super(context, R.style.MyDialogStyle);
    this.mContext = context;
    this.mTitle = title;
    this.mDetail = detail;
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    initView();
  }
  private void initView() {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    View view = inflater.inflate(R.layout.layout_dialog, null);
    setContentView(view);
    mButtonYes = (TextView) view.findViewById(R.id.dialog_yes);
    mButtonNo = (TextView) view.findViewById(R.id.dialog_no);
    mTextTitle = (TextView) view.findViewById(R.id.dialog_title);
    mTextDetail = (TextView) view.findViewById(R.id.dialog_detail);
    mTextTitle.setText(mTitle);
    mTextDetail.setText(mDetail);
    mButtonYes.setOnClickListener(this);
    mButtonNo.setOnClickListener(this);
  }
  public interface onClickInterface {
    public void clickYes();
    public void clickNo();
  }
  public void setOnClickInterface(onClickInterface onclClickInterface) {
    this.mOnclClickInterface = onclClickInterface;
  }
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.dialog_yes:
        mOnclClickInterface.clickYes();
        break;
      case R.id.dialog_no:
        mOnclClickInterface.clickNo();
        break;
      default:
        break;
    }
  }
}

這里就是:1.綁定布局 2.設(shè)置監(jiān)聽,監(jiān)聽接口

主要說一下布局里的stytle(懸浮在Activity上,模糊顯示就是在這里控制)

<style name="MyDialogStyle">
  <item name="android:windowBackground">@android:color/transparent</item> <!--設(shè)置dialog的背景-->
  <item name="android:windowFrame">@null</item> <!--Dialog的windowFrame框為無-->
  <item name="android:windowNoTitle">true</item> <!--是否有title-->
  <item name="android:windowIsFloating">true</item> <!--是否浮現(xiàn)在activity之上-->
  <item name="android:windowIsTranslucent">false</item> <!--是否半透明-->
  <item name="android:windowContentOverlay">@null</item> <!--對話框是否有遮蓋,這個不設(shè)置的話,可能會出現(xiàn)邊框黑線-->
  <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!--動畫-->
  <item name="android:backgroundDimEnabled">true</item> <!-- 背景是否模糊顯示-->
</style>

Dialog彈框一般用于,網(wǎng)絡(luò)數(shù)據(jù)加載顯示,或交互較少的彈框(基本被新下拉刷新控件SwipeRefreshLayout替代)

2.Window彈框

public class MyWindow {
  private Context mContext;
  private WindowManager mwinWindowManager;
  private View mView;
  private static boolean isShow = false;
  public MyWindow(Context context) {
   mContext = context.getApplicationContext();
  }
  public void showMyWindow() {
   if (isShow) {
     return;
   }
   mwinWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
   //設(shè)置WindowManager.LayoutParams的屬性
   WindowManager.LayoutParams params = new WindowManager.LayoutParams();
   //類型
   params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
   //flags
   //如果設(shè)置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,彈出的View沒焦點(diǎn),收不到Back鍵的事件
   //當(dāng)按Back、Home鍵時,背景應(yīng)用退出,彈出的view就可以懸浮在桌面了。
   params.flags = WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
   params.format = PixelFormat.TRANSLUCENT;
   params.width = LayoutParams.MATCH_PARENT;
   params.height = LayoutParams.MATCH_PARENT;
   params.gravity = Gravity.CENTER;
   //初始化View
   mView = initView(mContext);
   //點(diǎn)擊back鍵,關(guān)閉window
   mView.setOnKeyListener(new View.OnKeyListener() {
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
      Log.d("wxx", "onKey");
      switch (keyCode) {
      case KeyEvent.KEYCODE_BACK:
        Log.d("wxx", "onKey BACK");
        hideMyWindow();
        return true;
      default:
      return false;
      }
     }
   });
   mwinWindowManager.addView(mView, params);
   isShow = true;
  }
  private View initView(Context context) {
   LayoutInflater inflater = LayoutInflater.from(context);
   View view = inflater.inflate(R.layout.layout_window, null);
   Button btnYes = (Button) view.findViewById(R.id.window_yes);
   btnYes.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      Toast.makeText(mContext, "Window yes!", Toast.LENGTH_LONG).show();
      hideMyWindow();
     }
   });
   Button btnNO = (Button) view.findViewById(R.id.window_no);
   btnNO.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      Toast.makeText(mContext, "Window No!", Toast.LENGTH_LONG).show();
      hideMyWindow();
     }
   });    
   //點(diǎn)擊window窗口外圍,關(guān)閉window
   final View wView = view.findViewById(R.id.view_layout);
   view.setOnTouchListener(new View.OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
      int x = (int) event.getX();
      int y = (int) event.getY();
      Rect rect = new Rect();
      wView.getGlobalVisibleRect(rect);
      if (!rect.contains(x, y)) {
        hideMyWindow();
      }
      return false;
     }
   });
   return view;
  }
  public void hideMyWindow() {
   if (isShow && mView != null) {
     mwinWindowManager.removeView(mView);
     isShow = false;
   }
  }
}

這個就厲害了,展現(xiàn),隱藏,點(diǎn)擊監(jiān)聽都是自己寫的方法,原來點(diǎn)擊窗口外關(guān)閉窗口是這樣實(shí)現(xiàn)的,是不是又學(xué)到了

然后是關(guān)于:

android Window WindowManager 整理

主要用于自定義控件,比如說下拉框:

自定義spinner下拉框

3.Activity偽彈框

public class MyActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
   // TODO Auto-generated method stub
   super.onCreate(savedInstanceState);
   setContentView(R.layout.layout_activity);
  }
  @Override
  public boolean onTouchEvent(MotionEvent event) {
   this.finish();
   return true;
  }
  public void YesButton(View v) {
   this.finish();
   Toast.makeText(getApplicationContext(), "Yes, Hunman is Activity", Toast.LENGTH_LONG).show();
  }
  public void NoButton(View v) {
   this.finish();
   Toast.makeText(getApplicationContext(), "No, Hunman is not Activity", Toast.LENGTH_LONG).show();
  }
}

簡單得不能再簡單,跳轉(zhuǎn)跳轉(zhuǎn)到另一個Activity

注意點(diǎn)Activity主題(控制Activity為彈框樣式):

<activity
  android:name="com.wuxianxi.hunman.smallwindows.MyActivity"
  android:theme="@style/MyActivityStyle" >
</activity>
<style name="MyActivityStyle">
  <item name="android:windowBackground">@android:color/transparent</item> <!--設(shè)置dialog的背景-->
  <item name="android:windowFrame">@null</item> <!--Dialog的windowFrame框為無-->
  <item name="android:windowNoTitle">true</item> <!--是否有title-->
  <item name="android:windowIsFloating">true</item> <!--是否浮現(xiàn)在activity之上-->
  <item name="android:windowIsTranslucent">true</item> <!--是否半透明-->
  <item name="android:windowContentOverlay">@null</item> <!--對話框是否有遮蓋,這個不設(shè)置的話,可能會出現(xiàn)邊框黑線-->
  <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!--動畫-->
  <item name="android:backgroundDimEnabled">true</item> <!-- 背景是否模糊顯示-->
</style>

Activity偽彈框最常用,用于交互,操作較復(fù)雜的彈框,如圖二

補(bǔ)充這里可通過方法控制Activity彈框?qū)挶?/p>

 @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /** 設(shè)置寬度為屏幕的0.9*/
    WindowManager windowManager = getWindowManager();
    /* 獲取屏幕寬、高 */
    Display display = windowManager.getDefaultDisplay();
    /* 獲取對話框當(dāng)前的參數(shù)值 */
    WindowManager.LayoutParams p = getWindow().getAttributes();
    /* 寬度設(shè)置為屏幕的0.9 */
    p.width = (int) (display.getWidth() * 0.9);
    /* 設(shè)置透明度,0.0為完全透明,1.0為完全不透明 */
    p.alpha = 0.95f;
    /* 設(shè)置布局參數(shù) */
    getWindow().setAttributes(p);
//    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
//        ViewGroup.LayoutParams.WRAP_CONTENT);
    /* 設(shè)置點(diǎn)擊彈框外部不可消失 */
    setFinishOnTouchOutside(false);
  }

最后貼上MainActivity

public class MainActivity extends ActionBarActivity implements OnClickListener {
  private Button btnWindow;
  private Button btnDialog;
  private Button btnActivity;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   initView();
  }
  private void initView() {
   btnWindow = (Button) findViewById(R.id.btn_window);
   btnDialog = (Button) findViewById(R.id.btn_dialog);
   btnActivity = (Button) findViewById(R.id.btn_activity);
   btnWindow.setOnClickListener(this);
   btnDialog.setOnClickListener(this);
   btnActivity.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
   switch (v.getId()) {
   case R.id.btn_window:
     MyWindow myWindow = new MyWindow(this);
     myWindow.showMyWindow();
     break;
   case R.id.btn_dialog:
     //注意下面第一個參數(shù)不能為getApplicationContext(),而應(yīng)該是Activity, 因為辦有activity才能添加窗口
     final MyDialog dialog = new MyDialog(MainActivity.this, "Hunman - Dialog", "Hunman is a Dialog\nYes or No!");
     dialog.show();
     dialog.setOnClickInterface(new MyDialog.onClickInterface() {
      @Override
      public void clickYes() {
        dialog.dismiss();
        Toast.makeText(getApplicationContext(), "Yes, Hunman is Dialog", Toast.LENGTH_LONG).show();
      }
      @Override
      public void clickNo() {
        dialog.dismiss();
        Toast.makeText(getApplicationContext(), "Yes, Hunman is not Dialog", Toast.LENGTH_LONG).show();
      }
     });
     break;
   case R.id.btn_activity:
     Intent intent3 = new Intent(MainActivity.this, MyActivity.class);
     startActivity(intent3);
     break;
   default:
     break;
   }
  }
}

代碼下載地址:https://github.com/BabyWu/SmallWindows

以上所述是小編給大家介紹的淺析Android中常見三種彈框在項目中的應(yīng)用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android下拉列表(Spinner)效果(使用C#和Java分別實(shí)現(xiàn))

    Android下拉列表(Spinner)效果(使用C#和Java分別實(shí)現(xiàn))

    這篇文章主要介紹了Android下拉列表(Spinner)效果(使用C#和Java分別實(shí)現(xiàn)),本文直接給出效果圖和兩種語言的實(shí)現(xiàn)代碼及布局代碼,需要的朋友可以參考下
    2015-06-06
  • Android ViewPager無限循環(huán)實(shí)現(xiàn)底部小圓點(diǎn)動態(tài)滑動

    Android ViewPager無限循環(huán)實(shí)現(xiàn)底部小圓點(diǎn)動態(tài)滑動

    這篇文章主要為大家詳細(xì)介紹了Android ViewPager無限循環(huán)實(shí)現(xiàn)底部小圓點(diǎn)動態(tài)滑動的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 根據(jù)USER-AGENT判斷手機(jī)類型并跳轉(zhuǎn)到相應(yīng)的app下載頁面

    根據(jù)USER-AGENT判斷手機(jī)類型并跳轉(zhuǎn)到相應(yīng)的app下載頁面

    檢測瀏覽器的USER-AGENT,然后根據(jù)正則表達(dá)式來確定客戶端類型,并跳轉(zhuǎn)到相應(yīng)的app下載頁面,這個方法還是比較實(shí)用的,大家可以看看
    2014-09-09
  • Android內(nèi)存優(yōu)化操作方法梳理總結(jié)

    Android內(nèi)存優(yōu)化操作方法梳理總結(jié)

    這篇文章主要介紹了Android 內(nèi)存優(yōu)化知識點(diǎn)梳理總結(jié),Android 操作系統(tǒng)給每個進(jìn)程都會分配指定額度的內(nèi)存空間,App 使用內(nèi)存來進(jìn)行快速的文件訪問交互,長時間如此便需要優(yōu)化策略,文章分享優(yōu)化知識點(diǎn)總結(jié),需要的朋友可以參考一下
    2022-11-11
  • android?studio實(shí)現(xiàn)簡單的計算器小功能

    android?studio實(shí)現(xiàn)簡單的計算器小功能

    這篇文章主要為大家詳細(xì)介紹了android?studio實(shí)現(xiàn)簡單的計算器小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Android中Fragment的基本用法示例總結(jié)

    Android中Fragment的基本用法示例總結(jié)

    Fragment是activity的界面中的一部分或一種行為,下面這篇文章主要給大家介紹了關(guān)于Android中Fragment的基本用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • Android開發(fā)調(diào)用WebService的方法示例

    Android開發(fā)調(diào)用WebService的方法示例

    這篇文章主要介紹了Android開發(fā)調(diào)用WebService的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android調(diào)用WebService的原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2017-10-10
  • Android  listView 繪制表格實(shí)例詳解

    Android listView 繪制表格實(shí)例詳解

    這篇文章主要介紹了Android listView 繪制表格實(shí)例詳解的相關(guān)資料,這里附有實(shí)例代碼及實(shí)現(xiàn)效果圖,利用listView 繪制表格提供實(shí)現(xiàn)思路,需要的朋友可以參考下
    2017-01-01
  • Android 定時器實(shí)現(xiàn)圖片的變換

    Android 定時器實(shí)現(xiàn)圖片的變換

    這篇文章主要介紹了Android 定時器實(shí)現(xiàn)圖片的變換的相關(guān)資料,利用到定時器和handler,message的結(jié)合實(shí)現(xiàn)改功能,需要的朋友可以參考下
    2017-08-08
  • Android實(shí)現(xiàn)圖片的高斯模糊(兩種方式)

    Android實(shí)現(xiàn)圖片的高斯模糊(兩種方式)

    本文給大家分享兩種實(shí)現(xiàn)圖片的高斯模糊效果,非常不錯,具有參考借鑒價值,對android圖片高斯模糊效果感興趣的朋友一起看看吧
    2017-03-03

最新評論