Android 開發學習進程0.14

来源:https://www.cnblogs.com/baimiyishu/archive/2020/06/08/13069721.html
-Advertisement-
Play Games

##BindView ButterKnife 優勢 綁定組件方便,使用簡單 處理點擊事件方便,如adapter中的viewholder 同時父組件綁定後子組件無需綁定 註意 在setcontentview之後使用,且子空間不可再使用static final屬性 ##在不改變按鈕圖片大小的情況,擴大點 ...


BindView ButterKnife

優勢
綁定組件方便,使用簡單
處理點擊事件方便,如adapter中的viewholder
同時父組件綁定後子組件無需綁定
註意
在setcontentview之後使用,且子空間不可再使用static final屬性

在不改變按鈕圖片大小的情況,擴大點擊事件,

在較低Android版本此方法可能有問題,即src和setbackground的區別,同樣可以設置背景圖片,但src僅將圖片資源載入,不做其他處理,而setbackground會使圖片自適應與按鈕大小,但也有具體屬性設置,imagebutton相比常規button對圖片設置更加詳細,但對字處理較弱。

recyclerview設置滾動條自動將點擊項滾動到中間方法##

  • 重寫linerlayout類,如下代碼:
    public CenterLayoutManager(Context context) {
        super(context);
    }
   public CenterLayoutManager(Context context, int orientation, boolean reverseLayout) {
        super(context, orientation, reverseLayout);
    }
    public CenterLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
    @Override
    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
        RecyclerView.SmoothScroller smoothScroller = new CenterSmoothScroller(recyclerView.getContext());
        smoothScroller.setTargetPosition(position);
        startSmoothScroll(smoothScroller);
    }

    private static class CenterSmoothScroller extends LinearSmoothScroller {

        CenterSmoothScroller(Context context) {
            super(context);
        }
        @Override
        public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) {
            return (boxStart + (boxEnd - boxStart) / 2) - (viewStart + (viewEnd - viewStart) / 2);
        }
    }
}

註意重寫lanerlayoutmanager類的方法,與繪製組件較相似

  • 在點擊事件中設置centersmoothscroller的方法
  • 同時在記得為recycler適配器設置上你的自定義佈局

Popwindow配合recycler使用設置

popwindow一般不直接使用,配合recycler可以有更加多變的使用方法,popwindow與dialog傳統對話框區別可以在任意位置顯示,更加靈活,
與recycler結合

        View view = LayoutInflater.from(getContext()).inflate(R.layout.pop_classifyfragment,null);
        RecyclerView recyclerView =(RecyclerView) view.findViewById(R.id.pop_classifyfragment_list);
        recyclerView.setLayoutManager(new GridLayoutManager(getContext(),4));
        Classify_PopAdapter popAdapter =new Classify_PopAdapter(getContext(),mList);
        recyclerView.setAdapter(popAdapter);
        popAdapter.setClickListener(new AdapterClickListener() {
            @Override
            public void click(int flag, int position) {
            }
        });
        mPopWindow = new PopupWindow(view,
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
            mPopWindow.setContentView(view);
            mPopWindow.showAtLocation(pop_btn, Gravity.NO_GRAVITY, 187, 72);
            MWindowManager.init(getActivity()).lightoff();
            mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
                //在dismiss中恢復透明度
                public void onDismiss() {
                    MWindowManager.init(getActivity()).lighton();
                }
            });
}

原理為計算每一項的中心線位置,與視窗的中心線位置相減,計算出偏移量。而中心線位置由 (尾-頭)/2+頭 計算得出。
一般為額外寫一個類,不直接在activity中寫,會造成冗餘。
同時還需建立adapter類,便於設置數據,layoutparams還可設置popwindow的大小,展示時通過showatlocation後兩個屬性設置與原點偏移量,如第三個屬性為gravity.no_gravity預設會在左上角顯示原點,所以應根據實際情況設置參數

MWindow.init 方法

activity並不直接控制視圖,控制視圖的為window類,它有介面MWindow供使用,使用MWindow.init.lightoff() 方法和類似lighton()方法可以實現popwindwo打開關閉時主activity狀態的明暗變化,此時註意界面層次為activity、popwindow的父佈局如linerlayout、popwindow的子控制項。


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

-Advertisement-
Play Games
更多相關文章
  • 摘自:https://www.cnblogs.com/zhuchenglin/p/8686924.html 1. /bin目錄 / b i n目錄包含了引導啟動所需的命令或普通用戶可能用的命令(可能在引導啟動後)。這些命令都是二進位文件的可執行程式( b i n是b i n a r y - -二進位 ...
  • docker-distribution搭建的倉庫非常簡陋,它甚至連一個用戶認證都沒有,更別提多用戶;今天我們來介紹另外一款docker倉庫工具harbor;harbor這款工具相對docker-distribution來講功能上豐富了許多;它支持多租戶,可擴展的API和web ui ,支持跨多個h... ...
  • 消失了一段時間,我又回來啦。不多說,繼續把哨兵看完。 檢測主觀下線狀態 預設情況下,Sentinel會以每秒一次的頻率向所有與他創建了命令連接的實例(主從伺服器以及其他Sentinel)發送PING命令,並通過實例返回的PING命令回覆來判斷實例是否線上。 實例對PING命令的回覆可以分為兩種情況: ...
  • 本文源碼:GitHub·點這裡 || GitEE·點這裡 一、索引簡介 1、基本概念 首先要明確索引是什麼:索引是一種數據結構,數據結構是電腦存儲、組織數據的方式,是指相互之間存在一種或多種特定關係的數據元素的集合,例如:鏈表,堆棧,隊列,二叉樹等等。 其次要清楚索引的作用:索引可以使存儲引擎快速 ...
  • MySQL在對結果集排序的時候,可以根據某些欄位排序,也可以通過field函數自定義任意排序。 語法 ... order by field(value,str1,str2,str3,str4,,,strn) 示例 select * from score order by field(level,'A ...
  • 有一個 ? 遇到這樣一個疑問:當where查詢中In一個索引欄位作為條件,那麼在查詢中還會使用到索引嗎? SELECT * FROM table_name WHERE column_index in (expr) 上面的sql語句檢索會使用到索引嗎?帶著這個問題,在網上查找了很多文章,但是有的說 i ...
  • 概述 連接docker中的mysql終端(docker連接終端) 修改mysql配置 (vim使用和安裝) mysql大小寫簡單介紹 (庫名/錶面 欄位/內容 大小寫使用) docker下mysql終端操作(執行命令) 連接docker中的mysql終端 使用 查詢docker下的鏡像用來查看mys ...
  • 一、活動里的方法 (1)onCreate方法在活動創建之後必定執行的方法。 (2)Andorid程式講究​邏輯和視圖相分離; (3)setContentView()靜態方法,用於引入​視圖; (4)Android程式不推薦在程式中對字元串進行硬編碼​,最好的做法就是一般把字元串定義到res/valu ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...