用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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...