用PopWindow做下拉框

来源:http://www.cnblogs.com/shenchanghui/archive/2017/01/16/6289012.html
-Advertisement-
Play Games

最近在做下拉框,本來想用spinner,可是spinner達不到項目要求,跟同學同事問了一圈,都在用popwindow, 網上看了一下,popwindow挺簡單的,可定製性挺強的,符合我的要求,所以,借鑒網上看的代碼,自己擼了一 遍。寫篇博客以防忘記。 首先,先寫個自定義佈局,代碼如下 <?xml ...


    最近在做下拉框,本來想用spinner,可是spinner達不到項目要求,跟同學同事問了一圈,都在用popwindow,

網上看了一下,popwindow挺簡單的,可定製性挺強的,符合我的要求,所以,借鑒網上看的代碼,自己擼了一

遍。寫篇博客以防忘記。

    首先,先寫個自定義佈局,代碼如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="110dp"
    android:layout_height="wrap_content">
    <LinearLayout
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_circle_drop_down_qr_code"
        android:orientation="vertical"
        android:layout_marginRight="@dimen/padding_10"
        android:paddingBottom="0dp"
        android:paddingLeft="@dimen/padding_5"
        android:paddingRight="@dimen/padding_5"
        android:paddingTop="@dimen/padding_5">

        <LinearLayout
            android:id="@+id/lin_scan_qr_code"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal"
            android:paddingBottom="@dimen/padding_5"
            android:paddingTop="@dimen/padding_5">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_circle_scan_qr_code" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/padding_10"
                android:gravity="center"
                android:text="掃一掃"
                android:textColor="@color/color_white"
                android:textSize="@dimen/text_16" />
        </LinearLayout>

        <View
            android:layout_width="wrap_content"
            android:layout_height="1px"
            android:layout_marginLeft="@dimen/padding_3"
            android:layout_marginRight="@dimen/padding_3"
            android:background="@color/color_white" />

        <LinearLayout
            android:id="@+id/lin_my_qr_code"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal"
            android:paddingBottom="@dimen/padding_5"
            android:paddingTop="@dimen/padding_5">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_circle_my_qr_code" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/padding_10"
                android:gravity="center"
                android:text="二維碼"
                android:textColor="@color/color_white"
                android:textSize="@dimen/text_16" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>
View Code

    第二步,在代碼中定義popwindow樣式,綁定點擊事件,代碼如下:

// // 獲取自定義佈局文件pop.xml的視圖
        View customView = getActivity().getLayoutInflater().inflate(R.layout.lay_circle_pop_drop_down_qr_code,
                null, false);
        // 創建PopupWindow實例,200,150分別是寬度和高度

        mQrCodePopWindow = new PopupWindow(customView, CommonUtil.dipToPx(getContext(),110), ViewGroup.LayoutParams.WRAP_CONTENT,true);
        // 設置動畫效果 [R.style.AnimationFade 是自己事先定義好的]
//        popupwindow.setAnimationStyle(R.style.AnimationFade);
//        popupwindow.setTouchable(true);
//        popupwindow.setOutsideTouchable(true);
        mQrCodePopWindow.setBackgroundDrawable(new BitmapDrawable());
        customView.findViewById(R.id.lin_scan_qr_code).setOnClickListener(v -> {
            ToastUtil.show(getContext(),"掃一掃");
            dismissQrCodePopWindow();
        });
        customView.findViewById(R.id.lin_my_qr_code).setOnClickListener(v -> ToastUtil.show(getContext(),"二維碼"));
View Code

註意,代碼中的true為setFoucusable,如要點擊空白處隱藏popwindow的話,setFocusable(true)和setBackground()兩者必不可少(親測)。

    最後,為空間添加點擊事件,控制下拉框的顯示隱藏,代碼如下:

@OnClick(R.id.lin_top_right)
    public void onClick(View v) {
        if (mQrCodePopWindow != null&& mQrCodePopWindow.isShowing()) {
            mQrCodePopWindow.dismiss();
        } else {
            initQrCodePopWindow();
            mQrCodePopWindow.showAsDropDown(v);
        }
    }
View Code

(由於暫時沒有發現好的動畫效果,所以沒有添加動畫,如果大家有發現好的動畫,還請告知一二,在此謝過)

效果圖:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 模塊是 Node.js 應用程式的基本組成部分,文件和模塊是一一對應的。一個 Node.js 文件就是一個模塊,這個文件可能是 JavaScript 代碼、JSON 或者編譯過的 C/C++ 擴展。 由於JavaScript沒有模塊系統,所以Node.js依靠CommonJS規範自身實現了模塊系統。 ...
  • 實例 使用淡出效果來隱藏一個 <p> 元素: $(".btn1").click(function(){ $("p").fadeTo(1000,0.4); }); 親自試一試 實例 使用淡出效果來隱藏一個 <p> 元素: 親自試一試 定義和用法 fadeTo() 方法將被選元素的不透明度逐漸地改變為指 ...
  • 知識點: 1.UIButton使用和事件機制 2.UIImage 3.自定義UIButton UIButton 1.創建方式 按鈕類型 UIButtonTypeCustom 用戶自定義按鈕 UIButtonTypeRoundedRect 系統按鈕 UIButtonTypeDetailDisclosu ...
  • 從這裡開始是UI篇 知識點: 1.常用IOS基本控制項 2.UITouch 常用基本控制項 1.UISegmentedControl:分段控制器 1)創建方式 - (id)initWithItems:(NSArray *)items; items數組中可以有NSString或者是UIImage對象 UI ...
  • MarkDown 一種用於寫作的輕量級【標記語言】。它用簡潔的語法代替排版,而不像一般的文字處理軟體 Word 或者 Pages 有大量的排版、字體設置等。 如果你對文章的樣式沒有太多要求,只註重寫文章本身的話 MarkDown 將會是一個不錯的選擇。 一、 工具 支持 MarkDown 寫作的軟體 ...
  • 一直不想升級Xcode,但是沒辦法項目進度只能升級Xcode8,果然不出所料出現了不少bug, Xcode7運行一直沒有問題,但是在Xcode8上一直輸出AQDefaultDevice (173): skipping input stream 網上查到解決辦法 1.選擇 Product -->Sch ...
  • 假如下麵的一張圖片,是用來做按鈕的背景圖片的,原始尺寸是76 × 40 我們通過代碼將這張圖片設置為按鈕的背景圖片,假如我們將創建好的按鈕的寬高設置為:(W=200, H=50)代碼如下: 結果如下:圖片被拉伸了。 原因分析:是將原是尺寸為76 × 40 的圖片拉伸成了W=200, H=50;解決方 ...
  • 自定義彈框 效果 特點 1.可以定製彈框的樣式和內容。 2.例子中寫了三種不同的彈框樣式,可根據需求增加彈窗樣式。 用法 1.將父類文件夾中的文件拖入自己的工程中,然後定製自己需要的彈窗。(代碼中寫了三個形式彈窗,大家可參考例子編寫自己需要的形式) 2.定製的彈窗都得繼承這個父類,並實現它的方法。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...