1. 程式人生 > >自定義控制元件讓TextView(Radiobutton)、Button的drawableLeft和drawableRight與文字一起居中顯示

自定義控制元件讓TextView(Radiobutton)、Button的drawableLeft和drawableRight與文字一起居中顯示

TextView的drawableLeft、drawableRight和drawableTop是一個常用、好用的屬性,可以在文字的上下左右放置一個圖片,而不使用更加複雜佈局就能達到,我也常常喜歡用RadioButton的這幾個屬性實現很多效果,但是苦於不支援讓drawbleLeft與文字一起居中,設定gravity為center也無濟於事,終於有空研究了一下,這裡與大家一起分享。

佈局XML

  1. <com.assistant.expand.customview.DrawableCenterButton
  2.                         android:gravity
    ="left|center_vertical"
  3.                         android:drawableLeft="@drawable/icon_erweima"
  4.                         android:drawablePadding="5dp"
  5.                 android:id="@+id/btn_scale"
  6.                 android:layout_width="fill_parent"
  7.                 android:layout_height="fill_parent"
  8.                 android:background
    ="@android:color/transparent"
  9.                 android:singleLine="true"
  10.                 android:text="掃描二維碼簽到"
  11.                 android:textColor="@color/color_button2"
  12.                 android:textSize="17sp"/>


  1. /** 
  2.  * drawableLeft與文字一起居中顯示 
  3.  *  
  4.  *  
  5.  */
  6. publicclass DrawableCenterTextView extends
     TextView {  
  7.     public DrawableCenterTextView(Context context, AttributeSet attrs,  
  8.             int defStyle) {  
  9.         super(context, attrs, defStyle);  
  10.     }  
  11.     public DrawableCenterTextView(Context context, AttributeSet attrs) {  
  12.         super(context, attrs);  
  13.     }  
  14.     public DrawableCenterTextView(Context context) {  
  15.         super(context);  
  16.     }  
  17.     @Override
  18.     protectedvoid onDraw(Canvas canvas) {  
  19.         Drawable[] drawables = getCompoundDrawables();  
  20.         if (drawables != null) {  
  21.             Drawable drawableLeft = drawables[0];  
  22.             if (drawableLeft != null) {  
  23.                 float textWidth = getPaint().measureText(getText().toString());  
  24.                 int drawablePadding = getCompoundDrawablePadding();  
  25.                 int drawableWidth = 0;  
  26.                 drawableWidth = drawableLeft.getIntrinsicWidth();  
  27.                 float bodyWidth = textWidth + drawableWidth + drawablePadding;  
  28.                 canvas.translate((getWidth() - bodyWidth) / 20);  
  29.             }  
  30.         }  
  31.         super.onDraw(canvas);  
  32.     }  
  33. }  

下面是用Button的Right 例子

  1. /** 
  2.  * drawableRight與文字一起居中顯示 
  3.  *  
  4.  *  
  5.  */
  6. publicclass DrawableCenterButton extends Button {  
  7.     public DrawableCenterButton(Context context) {  
  8.         super(context);  
  9.         // TODO Auto-generated constructor stub
  10.     }  
  11.     public DrawableCenterButton(Context context, AttributeSet attrs,  
  12.     int defStyle) {  
  13.         super(context, attrs, defStyle);  
  14.     }  
  15.     public DrawableCenterButton(Context context, AttributeSet attrs) {  
  16.         super(context, attrs);  
  17.     }  
  18.     @Override
  19.     protectedvoid onDraw(Canvas canvas) {  
  20.         Drawable[] drawables = getCompoundDrawables();  
  21.         if (drawables != null) {  
  22.             Drawable drawableLeft = drawables[2];  
  23.                 if (drawableLeft != null) {  
  24.                 float textWidth = getPaint().measureText(getText().toString());  
  25.                 int drawablePadding = getCompoundDrawablePadding();  
  26.                 int drawableWidth = 0;  
  27.                 drawableWidth = drawableLeft.getIntrinsicWidth();  
  28.                 float bodyWidth = textWidth + drawableWidth + drawablePadding;  
  29.                 setPadding(00, (int)(getWidth() - bodyWidth), 0);  
  30.                 canvas.translate((getWidth() - bodyWidth) / 20);  
  31.             }  
  32.         }  
  33.         super.onDraw(canvas);  
  34.     }  
  35. }  

相關推薦

定義控制元件TextViewRadiobuttonButton的drawableLeftdrawableRight文字一起居中顯示

TextView的drawableLeft、drawableRight和drawableTop是一個常用、好用的屬性,可以在文字的上下左右放置一個圖片,而不使用更加複雜佈局就能達到,我也常常喜歡用RadioButton的這幾個屬性實現很多效果,但是苦於不支援讓drawbl

定義控制元件TextViewButton的drawableLeftdrawableRight文字一起居中顯示

TextView的drawableLeft、drawableRight和drawableTop是一個常用、好用的屬性,可以在文字的上下左右放置一個圖片,而不使用更加複雜佈局就能達到,我也常常喜歡用Ra

定義控制元件TextView的drawableLeft文字一起居中顯示

Drawable[] drawables = getCompoundDrawables();          if  (drawables != 

定義控制元件學習筆記文字的繪製

1 Canvas 繪製文字的方式 Canvas 的文字繪製方法有三個:drawText() drawTextRun() 和 drawTextOnPath()。 1.1 drawText(String text, float x, float y, Paint

Android定義控制元件開發系列——仿支付寶六位支付密碼輸入頁面

        在移動互聯領域,有那麼幾家龍頭一直是我等學習和追求的目標,比如支付寶、微信、餓了麼、酷狗音樂等等,大神舉不勝舉,他們設計的介面、互動方式已經培養了中國(有可能會是世界)民眾的操作習慣:舉個小例子,對話方塊“確定”按鈕的左右位置就很有學問,如果大家都是左邊取消

swift 定義控制元件在StoryBoardxib裡使用的屬性

有時候我們在StoryBoard裡用拖拽方法建立屬性的時候,總會有一些常用的屬性沒有提供視覺化操作,所以我們必須在連線類中用程式碼去實現,雖然也比較簡單,但是這樣重複的操作大大的增加了開發時間,如果能在拖拽的介面就能直接除錯相關屬性,就像一個UIView直接視覺化設定背景顏

四十七c#Winform定義控制元件-樹表格treeGrid

前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制元件,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr

五十八c#Winform定義控制元件-管道閥門工業

前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制元件,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr

八十三c#Winform定義控制元件-導航選單擴充套件

前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制元件,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_control.

定義控制元件之 PasswordEditText密碼輸入框

前兩天在掘金上看到了一個驗證碼輸入框,然後自己實現了一下,以前都是繼承的 View,這次繼承了 ViewGroup,也算是嘗試了一點不同的東西。先看看最終效果: 事實上就是用將輸入的密碼用幾個文字框來顯示而已,要打造這樣一個東西我剛開始也是一頭霧水,不急,直接寫不會,我們可以採取曲線救

定義控制元件之 Gamepad 遊戲手柄

這段時間自己在復刻一個小時候玩過的小遊戲——魔塔,在人物操控的時候剛開始用的感覺 low low 的上下左右四個方向鍵,後來受王者農藥啟發,決定採用現在很多遊戲中的那種遊戲手柄,網上也有例子,不過最近自己對自定義控制元件很感興趣,決定自己擼一個,最後實現的效果是這樣的: 看到這樣

定義控制元件之 SubmitBotton 提交按鈕

在 Android 中我覺得除了實現很多功能性很強的需求之外,最吸引我的就是各種炫酷的自定義控制元件,但是自定義控制元件這個東西沒有辦法用一種固定的模式來講解,因為自定義控制元件都是根據需求來定製的。同時這也說明只要程式猿牛逼,就沒有實現不了的功能。 之前有看到一個效果: Android

WPF 定義控制元件的坑蠢的:定義控制元件內容不顯示

原文: WPF 自定義控制元件的坑(蠢的:自定義控制元件內容不顯示) 自定義控制元件不顯示內容 由於工作需要在寫WPF,其中想要實現一些自己的控制元件所以直接自定義了控制元件博主是繼承了ContenControl的控制元件開始寫的但是發現不管設定Content屬性為任何都是不顯示

WPF定義控制元件中使用了RadioButton後,多次使用該控制元件出現的死迴圈解決方法

最近在專案中需要用到RadioButton,所以在自定義控制元件中使用了一組RadioButton,使用一個預設的groupname,也就是這個goupname給後來的問題埋下了地雷。 定義大致如下: <Grid> <Label Height ="50" W

定義控制元件--背景顏色隨ViewPager的滑動而漸變

轉載請註明出處,謝謝~ 今天要說一個簡單但不好想的效果實現。程式碼絕對簡單,實現絕對easy,就是你可能想不到而已。 不多說,上效果圖。第一個效果是仿最美應用的滑動顏色變化,第二個是我專案中要用的效果,實現後我就貼出來了,開源嘛。               下面分別說說

定義控制元件EditText的drawableLeft文字一起居中顯示

如上圖  專案中要求的顯示效果是serch圖片和EditText的文字一起在中間位置。 嘗試設定了很多EditText均不能實現滿意的效果,其中: android:drawableLeft="" android:drawableRight=""設定的位置均在兩邊,不能滿足

Android實戰簡易教程-第六十九槍定義控制元件實現雪花飄落效果

現在APP要求越來越高了,不只是要求實現功能,顏值的要求也越來越高,下面我們通過自定義控制元件來實現雪花飄落的效果,可以作為介面背景哦。1.自定義控制元件:package com.test.a; import java.util.Random; import androi

閱讀徐宜生《Android群英傳》的筆記——第3章 Android控制元件架構定義控制元件詳解3.6-3.8

3.6 自定義 View 在自定義 View 時,我們通常會去重寫 onDraw() 方法來繪製 View 的顯示內容。如果該 View 還需要使用 wrap_content 屬性,那麼還必須重寫 onMeasure() 方法。另外,通過自定義 attr

Android 控制元件之 RecyclerView—— 載入檢視佈局選擇

本文目錄 一、概述 二、列表檢視的處理 1. item 的佈局檔案 2. 構造 Adapter 類 3. 佈局管理器 1)LinearLayoutManager 2)GridLayoutManager

TextView的drawableLeft文字一起居中顯示以及程式碼設定drawableLeft

網上一搜全是自定義控制元件,其實去看看TextView的屬性,就能發現,解決這個問題,直接xml檔案中就能搞定,程式碼如下: <!-- 不明白的屬性請自行查閱資料--> <TextView android:id="@+id/tv_finish"