最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義彈出窗口PopupWindow使用技巧

 更新時間:2021年10月19日 10:30:30   作者:sw926  
這篇文章主要介紹了Android自定義彈出窗口PopupWindow使用技巧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

PopupWindow是Android上自定義彈出窗口,使用起來很方便。

PopupWindow的構(gòu)造函數(shù)為

復(fù)制代碼 代碼如下:
public PopupWindow(View contentView, int width, int height, boolean focusable)

contentView為要顯示的view,width和height為寬和高,值為像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。

focusable為是否可以獲得焦點,這是一個很重要的參數(shù),也可以通過public void setFocusable(boolean focusable)來設(shè)置,如果focusable為false,在一個Activity彈出一個PopupWindow,按返回鍵,由于PopupWindow沒有焦點,會直接退出Activity。如果focusable為true,PopupWindow彈出后,所有的觸屏和物理按鍵都有PopupWindows處理。

如果PopupWindow中有Editor的話,focusable要為true。

下面實現(xiàn)一個簡單的PopupWindow

主界面的layout為:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/layout_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context=".MainActivity" >

 <Button
  android:id="@+id/btn_test_popupwindow"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_centerInParent="true"
  android:text="@string/app_name" />

</RelativeLayout>

PopupWindow的layout為:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="#000000" >

 <TextView
  android:layout_width="wrap_content"
  android:layout_height="80dp"
  android:text="@string/app_name" 
  android:textColor="#ffffffff"
  android:layout_centerInParent="true"
  android:gravity="center"/>

</RelativeLayout>

Activity的代碼為:

public class MainActivity extends Activity {

 private Button mButton;
 private PopupWindow mPopupWindow;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  View popupView = getLayoutInflater().inflate(R.layout.layout_popupwindow, null);

  mPopupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);
  mPopupWindow.setTouchable(true);
  mPopupWindow.setOutsideTouchable(true);
  mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

  mButton = (Button) findViewById(R.id.btn_test_popupwindow);
  mButton.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
    mPopupWindow.showAsDropDown(v);
   }
  });
 }
}

這三行代碼

mPopupWindow.setTouchable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

的作用是點擊空白處的時候PopupWindow會消失。

mPopupWindow.showAsDropDown(v);
這一行代碼將PopupWindow以一種向下彈出的動畫的形式顯示出來

public void showAsDropDown(View anchor, int xoff, int yoff)
這個函數(shù)的第一個參數(shù)為一個View,我們這里是一個Button,那么PopupWindow會在這個Button下面顯示,xoff,yoff為顯示位置的偏移。

點擊按鈕,就會顯示出PopupWindow

很多時候我們把PopupWindow用作自定義的菜單,需要一個從底部向上彈出的效果,這就需要為PopupWindow添加動畫。

在工程res下新建anim文件夾,在anim文件夾先新建兩個xml文件

menu_bottombar_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

 <translate
  android:duration="250"
  android:fromYDelta="100.0%"
  android:toYDelta="0.0" />

</set>

menu_bottombar_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

 <translate
  android:duration="250"
  android:fromYDelta="0.0"
  android:toYDelta="100%" />

</set>

在res/value/styles.xml添加一個sytle

 <style name="anim_menu_bottombar">
  <item name="android:windowEnterAnimation">@anim/menu_bottombar_in</item>
  <item name="android:windowExitAnimation">@anim/menu_bottombar_out</item>
 </style>

Acivity修改為

public class MainActivity extends Activity {

 private PopupWindow mPopupWindow;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  View popupView = getLayoutInflater().inflate(R.layout.layout_popupwindow, null);

  mPopupWindow = new PopupWindow(popupView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);
  mPopupWindow.setTouchable(true);
  mPopupWindow.setOutsideTouchable(true);
  mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));

  mPopupWindow.getContentView().setFocusableInTouchMode(true);
  mPopupWindow.getContentView().setFocusable(true);
  mPopupWindow.getContentView().setOnKeyListener(new OnKeyListener() {
   @Override
   public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0
      && event.getAction() == KeyEvent.ACTION_DOWN) {
     if (mPopupWindow != null && mPopupWindow.isShowing()) {
      mPopupWindow.dismiss();
     }
     return true;
    }
    return false;
   }
  });
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
   if (mPopupWindow != null && !mPopupWindow.isShowing()) {
    mPopupWindow.showAtLocation(findViewById(R.id.layout_main), Gravity.BOTTOM, 0, 0);
   }
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }
}

這樣點擊菜單鍵會彈出自定義的PopupWindow,點擊空白處或者返回鍵、菜單鍵,PopupWindow會消失。

文章如果有不對的地方,希望大家理解。

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

相關(guān)文章

  • Android車載空調(diào)系統(tǒng)(HVAC)開發(fā)方法分析

    Android車載空調(diào)系統(tǒng)(HVAC)開發(fā)方法分析

    HVAC?全稱:供暖通風(fēng)與空氣調(diào)節(jié)(Heating?Ventilation?and?Air?Conditioning),用戶可以通過他來控制整個汽車的空調(diào)系統(tǒng),是汽車中非常重要的一個功能,汽車的空調(diào)HMI雖然并不復(fù)雜,但是大多都是用符號來表示功能,必須理解空調(diào)的各個符號表示的含義
    2023-12-12
  • Android圖像切換器imageSwitcher的實例應(yīng)用

    Android圖像切換器imageSwitcher的實例應(yīng)用

    這篇文章主要為大家詳細介紹了Android圖像切換器imageSwitcher的實例應(yīng)用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Android未讀消息拖動氣泡示例代碼詳解(附源碼)

    Android未讀消息拖動氣泡示例代碼詳解(附源碼)

    這篇文章主要介紹了Android未讀消息拖動氣泡示例代碼詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • android檢測網(wǎng)絡(luò)連接狀態(tài)示例講解

    android檢測網(wǎng)絡(luò)連接狀態(tài)示例講解

    網(wǎng)絡(luò)的時候,并不是每次都能連接到網(wǎng)絡(luò),因此在程序啟動中需要對網(wǎng)絡(luò)的狀態(tài)進行判斷,如果沒有網(wǎng)絡(luò)則提醒用戶進行設(shè)置
    2014-02-02
  • Kotlin中局部方法的深入探究

    Kotlin中局部方法的深入探究

    這篇文章主要給大家介紹了關(guān)于Kotlin中局部方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Android中如何實現(xiàn)清空搜索框的文字

    Android中如何實現(xiàn)清空搜索框的文字

    本文主要介紹Android中實現(xiàn)清空搜索框的文字的方法。項目中的有關(guān)搜索的地方,加上清空文字的功能,目的是為了增加用戶體驗,使用戶刪除文本更加快捷。需要的朋友一起來看下吧
    2016-12-12
  • Android編程輸入事件流程詳解

    Android編程輸入事件流程詳解

    這篇文章主要介紹了Android編程輸入事件流程,較為詳細的分析了Android輸入事件原理、相關(guān)概念與具體操作流程,需要的朋友可以參考下
    2016-10-10
  • Android藍牙服務(wù)啟動流程分析探索

    Android藍牙服務(wù)啟動流程分析探索

    這篇文章主要介紹了Android藍牙服務(wù)啟動流程,了解內(nèi)部原理是為了幫助我們做擴展,同時也是驗證了一個人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的
    2023-01-01
  • android downsample降低音頻采樣頻率代碼

    android downsample降低音頻采樣頻率代碼

    這篇文章主要介紹了android downsample降低音頻采樣頻率代碼,需要的朋友可以參考下
    2014-02-02
  • Android手勢滑動實現(xiàn)兩點觸摸縮放圖片

    Android手勢滑動實現(xiàn)兩點觸摸縮放圖片

    這篇文章主要介紹了Android手勢滑動實現(xiàn)兩點觸摸縮放圖片的相關(guān)資料,需要的朋友可以參考下
    2016-02-02

最新評論

潜江市| 乌拉特后旗| 小金县| 铁力市| 山东| 拉萨市| 郯城县| 南漳县| 长顺县| 永年县| 南丹县| 同德县| 普陀区| 临沂市| 卢氏县| 大兴区| 禹城市| 大宁县| 区。| 安多县| 崇州市| 大连市| 晋中市| 博白县| 外汇| 乌拉特前旗| 桐城市| 凤阳县| 张家界市| 股票| 江源县| 綦江县| 望都县| 汪清县| 开平市| 景洪市| 紫云| 临桂县| 自贡市| 雷州市| 视频|