安卓開發筆記(三十):自定義Button

来源:https://www.cnblogs.com/geeksongs/archive/2019/04/29/10789671.html
-Advertisement-
Play Games

在筆者本人看了很多博客和書之後,發現很少博主對於自定義控制項能夠進行一個比較全面的思路講解,大多數都是只講了一些細節,但並沒有講如何把代碼進行整體的實現。因此這裡講講整體的自定義button實現的詳細過程,其餘的細節則可以查看其他博主的博客即可,也可以參考《Android開發藝術探索》這本書的第六章, ...


在筆者本人看了很多博客和書之後,發現很少博主對於自定義控制項能夠進行一個比較全面的思路講解,大多數都是只講了一些細節,但並沒有講如何把代碼進行整體的實現。因此這裡講講整體的自定義button實現的詳細過程,其餘的細節則可以查看其他博主的博客即可,也可以參考《Android開發藝術探索》這本書的第六章,看了我這篇博文之後,相信你一定對自定義控制項會有一定的瞭解。

首先是創建一個根節點為shape的xml,用於描述我們所創建的button沒有被按時的界面,如圖:

我們可以看到其四周都是由圓角來修飾的,那麼我們怎麼在shape根節點里把這個button的樣式寫出來呢?我們來看看代碼,不知道如何創建shape文件的童鞋可以參考一下這個百度經驗,傳送門:https://jingyan.baidu.com/article/b907e62795139746e7891cb9.html

一.button_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
    android:color="#ff9d77"
    >
</solid>
<stroke
    android:width="2dp"
    android:color="#fad3cf">

</stroke>
<corners
    android:bottomLeftRadius="20dp"
    android:bottomRightRadius="20dp"
    android:topLeftRadius="20dp"
    android:topRightRadius="20dp" >
</corners>
<padding
    android:bottom="10dp"
    android:left="10dp"
    android:right="10dp"
    android:top="10dp"
    >


</padding>



</shape>

這樣我們的按鈕自定義界面就完成了,這是在沒被按住的情況下,下麵再來看看在按住情況下的程式代碼,也是一個shape文件,後面我們會用選擇器對它們的邏輯進行整合,最後在Button控制項里進行調用這個選擇器的邏輯。

二.demo.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   >
<gradient
    android:endColor="#FFFFFF"
    android:gradientRadius="200dp"
    android:startColor="#ff8c00"
    android:type="radial" >

</gradient>
<stroke
    android:width="5dp"
    android:color="#dcdcdc"
    >
</stroke>
<corners
    android:radius="23dp"   >
</corners>
<padding
    android:bottom="10dp"
    android:left="10dp"
    android:right="10dp"
    android:top="10dp"
    >



</padding>
</shape>

這樣在按下按鈕之後,就會呈現出來不同的顯示效果,可以讓用戶明顯感受到一種人機交互的感覺,之後是我們的選擇器,因為在主活動當中我們只能夠調用我們的選擇器從而引出這兩個效果。

三.selector.xml

這個文件的創建方式和shape類似,這裡就不多說了,我們直接上代碼:

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

<item android:drawable="@drawable/demo" android:state_pressed="true"></item>
    <item android:drawable="@drawable/button_bg"></item>


</selector>

我們可以看到在第一個item下麵描述的是我們的按鈕被按下去的界面將會變成demo.xml,平時正常的界面則是button_bg了。這就是上述代碼的含義,之後我們再去主活動當中調用這個選擇器,之後我們的自定義button就輕鬆完成啦!

四.activity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="我是一個按鈕"
        android:background="@drawable/selector"/>

</android.support.constraint.ConstraintLayout>

可以看到我們在button控制項當中的backgroud屬性當中引入了我們的選擇器,這樣子呢就可以把之前我們所定義的界面引入到這個button按鈕當中了。


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

-Advertisement-
Play Games
更多相關文章
  • SQL Server的Descending Indexes 測試環境:SQL Server 2012 表結構如下 插入測試數據 查詢語句如下,可以看到這個是組合欄位排序,要求是:按照draw_num值正序,對於相同的draw_num值,按照win_num值倒序 根據查詢語句建一個非聚集索引 建了索引 ...
  • 1.什麼是連接查詢?(B) 很多時候我們需要查詢的數據並不是來源於同一張表,而是來源於多張表,而這種一個查詢需要對多張表進行操作,就成為連接查詢。 2.如何進行表的連接查詢? 連接查詢有兩種方式:SQL 1992(1992年發佈的標準) 和SQL 1999(1999年發佈的標準) 3.SQL1992 ...
  • Centos7.6 部署3個Mariadb 實例 ...
  • 環境介紹:操作系統為Centos7.1;測試設備全部為內網設備,不通公網,所以需要配置本地yum源; 首先安裝ansible工具,用來批量安裝ambari、java以及基礎的一些配置; 一、 免密鑰登錄: *註:所有的設備均可以通過root直連 ssh-keygen -t rsa 相關命令: scp ...
  • 在我的上一篇博文當中闡述了我們如何使用shape標簽進行自定義控制項,這裡對shape控制項的屬性進行闡述,不知道如何使用這些屬性的可以參見我的上一篇博文(自定義Button):https://www.cnblogs.com/geeksongs/p/10789671.html 在Android Stud ...
  • 版權聲明:本文為HaiyuKing原創文章,轉載請註明出處! 前言 嘗試的方案包括以下幾種: freemarker 只能在java項目上運行,無法在Android項目上運行; 參考資料:《FreemarkerJavaDemo【Android將表單數據生成Word文檔的方案之一(基於freemarke ...
  • Hi3559AV100 DDR4 驅動配置說明 Hi3559AV100 DDR4 驅動配置說明 1.1 Hi3559AV100 DDR4 CLK/AC 驅動配置方法 1.1 Hi3559AV100 DDR4 CLK/AC 驅動配置方法 寄存器地址 寄存器地址 DDR PHY0:0x1206d0bc ...
  • 不管是系統開發還是應用開發,ANR 一直是揮之不去的存在!本文從 ANR 的觸發機制以及一個簡單的範例來探討 ANR 的原理和處理方法! ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...