1. 程式人生 > >Android Button可同時設定圖片跟文字

Android Button可同時設定圖片跟文字

其實有一個大家一直沒有注意發現的問題就是Button是繼承與TextView,是TextView衍生出來的,自然就有些方法就可以呼叫。

下面這兩個方法就是本文的重點:

context.getDrawable(left)
setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
專案中的tab下的幾個可切換的按鈕效果圖:這個方法就可以設定button上四個方向的圖片
先來看下TextView中這個方法是怎麼來的把:
public void setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) {
        final Context context = getContext();
        setCompoundDrawablesWithIntrinsicBounds(left != 0 ? context.getDrawable(left) : null,
                top != 0 ? context.getDrawable(top) : null,
                right != 0 ? context.getDrawable(right) : null,
                bottom != 0 ? context.getDrawable(bottom) : null);
    }
public void setCompoundDrawablesWithIntrinsicBounds(@Nullable Drawable left,
        @Nullable Drawable top, @Nullable Drawable right, @Nullable Drawable bottom) {

    if (left != null) {
        left.setBounds(0, 0, left.getIntrinsicWidth(), left.getIntrinsicHeight());
    }
    if (right != null) {
        right.setBounds(0, 0, right.getIntrinsicWidth(), right.getIntrinsicHeight());
    }
    if (top != null) {
        top.setBounds(0, 0, top.getIntrinsicWidth(), top.getIntrinsicHeight());
    }
    if (bottom != null) {
        bottom.setBounds(0, 0, bottom.getIntrinsicWidth(), bottom.getIntrinsicHeight());
    }
    setCompoundDrawables(left, top, right, bottom);
}
上面的context.getDrawable(left)就是給我們傳進來的圖片id進行設定成為一個Drawable類,
然後在設定相對位置可通過上面的第二個方法中的setBounds(int left, int top, int right, int bottom)
比如這裡的getIntrinsicWidth()跟getIntrinsicHeight()就是獲取圖片的width跟height(單位dip/dp)
提示:上面所說的setBounds()這個方法不能單獨去設定圖片的位置,而我們如果想設定的話更好的還是採用setLayoutParams()比較好點

現在認識了setCompoundDrawablesWithIntrinsicBounds()這個方法後我們就可以設定Button上的圖示,在採用setText()就可以設定如圖下的效果:

如果感覺圖示跟文字之間的距離太近,可以通過setCompoundDrawablePadding(int  pad)去設定,引數pad只是設定兩者間的距離.

備註:對於上面提到的getIntrinsicWidth()跟getIntrinsicHeight()就是獲取圖片的width跟height(單位dip/dp),我覺得有必要在提一下

 <ImageView
        android:id="@+id/image"
        android:src="@mipmap/lizhi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
(zhili.png)的大小是96*96png
ImageView mImg = (ImageView) findViewById(R.id.image);
int intrinsicWidth = mImg.getDrawable().getIntrinsicWidth();
int intrinsicHeight = mImg.getDrawable().getIntrinsicHeight();
<span style="font-size:14px;">Toast.makeText(this, "width:" + intrinsicWidth +";height: "+ intrinsicHeight, Toast.LENGTH_SHORT).show();</span>

上面打印出來的width跟height在電腦上的Android-studio上的模擬器上是@mipmap/lizhi及我們在mipmap檔案中對應模擬器解析度上的圖片的大小是(width:96; height: 96),而在本人的真機上確實(width:192; height:192)

其實這裡的192單位不是以dip/dp為單位的,而是跟手機的dip有關,或則說是跟解析度有關吧,這麼說我們聽的就比較清楚了.

我的測試裝置dpi是320,而android為了讓同一個view在不同dpi的裝置上大小盡量保持一致,建議度量單位採用dip/dp。(關於自己手機的dip可以在網上看下怎麼運算)
所以我猜測上面兩個方法的單位應該是dp,所以96dip * 320/160 = 192px; 所以各位同學現在明白了吧,getIntrinsicWidth()和getIntrinsicHeight()返回的寬高應該是dp為單位的哦。

相關推薦

Android Button同時設定圖片文字

其實有一個大家一直沒有注意發現的問題就是Button是繼承與TextView,是TextView衍生出來的,自然就有些方法就可以呼叫。 下面這兩個方法就是本文的重點: context.getDrawa

Android:新浪微博拉起客戶端分享——完美實現同時分享圖片文字(Intent.ACTION_SEND)

新浪微博拉起客戶端分享——完美實現同時分享圖片和文字(Intent.ACTION_SEND) 點選事件後處理: private void  share(String content, Uri uri){

iOS Button 按鈕 設定圖片文字的右邊

     UIButton * cityBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];     [cityBtn setTitle:@"上海"forState:UIControlStateNormal];     [c

Android程式碼中設定圖片文字自定義顏色,Linearlayout等控制元件設定背景

平時專案中遇到的問題,在此記錄警示自己,也可使別人少走彎路。 ————–> 1. 程式碼中設定圖片,使用iv.setImageResource(R.mipmap.yishenghuo2);

android 調用系統分享圖片文字

系統分享文字 系統分享圖片 Bitmap Assets File 調用系統分享文字:public static void shareText(Context context, String extraText) {Intent intent = new Intent(Intent.ACTI

Qt學習筆記:QLabel同時顯示圖片文字

環境 系統:Windows10 64位 家庭中文版 Qt版本:5.6.0 msvc2013 64位 編譯器:Visual Studio 2013 專業版 前言 QLabel是Qt自帶的一個顯示用控制元件,可以用來顯示圖片和文字。其使用也非常方便:用setPixmap(cons

android 橫向滑動的圖片

忘記在哪個大神哪裡淘來的程式碼,如有侵權請告知,謝謝。 直接將下面程式碼放入專案 /* * Copyright (C) 2014 The Android Open Source Project. * * [email protected]

UIButton 設定圖片文字上下居中顯示

在很多的應用中,按鈕(UIButton)是經常用到的控制元件,在按鈕上顯示各式各樣的樣式,其中預設是圖片居左,文字居右。而很多情況下,為了按鈕美觀,都會重定義按鈕,設定為圖片居上,文字居下。方式為:

Android程式碼中動態設定圖片的大小(自動縮放),位置

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andr

Android TextView圖文混排,圖片文字居中對齊

TextView用來顯示文字是最普通的用法了,有些情況需要我們再文字中顯示圖片,比如顯示錶情,下邊來說說處理方法. 1.下圖是專案中一個UI需求 如圖需要在文字的前邊顯示新上標籤,開始的處理方法是用了兩個空間分別顯示標籤和文字,但是有個問題是第二行的文字

RadioButton去掉小圓圈、設定圖片文字居於圖片下方

去掉小圓圈: 在RadioButton中設定程式碼 android:button="@null" 即可去掉RadioButton前面的小圓圈。 只設置RadioButton的圖片: android:background=""設定RadioButton的圖片,並將

Android EditText inputType同時設定textPassword和phone

android:password這個已經廢棄了就不說了 但是,android:inputType="phone|textPassword"無效,而如果你是Android 3.0以上的話,android:inputType="numberPassword" 可能是最好的選擇; 那麼如果是3.0一下的呢?

Android Button 常用屬性設定,圓角,邊框,點選事件

<Button <!--設定代表此button的id--> android:id="@+id/btn" android:layout_width="200dp" andro

Android Intent分享檔案|分享圖片|分享文字|功能的實現

Android Intent 實現分享功能。可分享圖片,檔案,文字給QQ好友,微信好友,簡訊聯絡人。 如我所知:網上已經有一大堆這樣相關的資料。但是有些不幸的是:沒有看到一個完整的,比較全面的,可以直接拿來使用的工具類。於是,我結合網上找的這些資料,做了一個簡

Android系統自帶分享功能的實現(同時分享文字圖片

簡單,不解釋,直接上程式碼,可直接使用! 程式碼如下: /** * 分享功能 * * @param context * 上下文 * @param activ

Android RadioButton設定選中時文字和背景顏色同時改變

在使用 RadioButton 時,有時我們會想要達到選中時文字顏色和背景顏色同時改變的效果,這裡還需要多進行幾步操作。 首先,在佈局檔案中新建一組 RadioButton : <RadioGroup andr

Android Button圖片文字都居左,且有一點間距

<Button         android:id="@+id/message"         android:layout_width="200dip"                 android:layout_height="wrap_content"         android:dra

Android常用例項——擷取APP當前介面(圖片文字水印)

我們經常會看到很多APP會有一個截圖的功能,雖然現在很多手機本身已經有截圖的功能了,但是截圖後不能加水印,這也是不小的麻煩,今天我們聊聊怎麼截圖APP當前介面自己想要的內容,並且加上水印後儲存。 先看看我們的總體介面的效果。 這個就是在我點選儲存按鈕後儲

android 在selector中同時設定button的圓角和點選效果,簡單顏色無需美工

1,如果我們沒有美工來設計我們的圓角圖片,可以採用shape的方式實現: <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.andr

Android 程式碼裡動態設定TextView/Button等的文字顏色Seletor

前言 今天遇到個很蛋疼的問題,下載時,多個按鈕共用一個button,也就是不同下載狀態下,button的背景以及字型顏色都不一樣,結果自己挖了坑把自己埋進去了。 以下是我在/res/color資