Android setButtonDrawable()的兼容問(wèn)題解決辦法
Android setButtonDrawable()的兼容問(wèn)題解決辦法
setButtonDrawable()的兼容問(wèn)題
API16實(shí)現(xiàn)
/**
* Set the background to a given Drawable, identified by its resource id.
*
* @param resid the resource id of the drawable to use as the background
*/
public void setButtonDrawable(int resid) {
if (resid != 0 && resid == mButtonResource) {
return;
}
mButtonResource = resid;
Drawable d = null;
if (mButtonResource != 0) {
d = getResources().getDrawable(mButtonResource);
}
setButtonDrawable(d);
}
/**
* Set the background to a given Drawable
*
* @param d The Drawable to use as the background
*/
public void setButtonDrawable(Drawable d) {
if (d != null) {
if (mButtonDrawable != null) {
mButtonDrawable.setCallback(null);
unscheduleDrawable(mButtonDrawable);
}
d.setCallback(this);
d.setState(getDrawableState());
d.setVisible(getVisibility() == VISIBLE, false);
mButtonDrawable = d;
mButtonDrawable.setState(null);
setMinHeight(mButtonDrawable.getIntrinsicHeight());
}
refreshDrawableState();
}
API23實(shí)現(xiàn)
/**
* Sets a drawable as the compound button image given its resource
* identifier.
*
* @param resId the resource identifier of the drawable
* @attr ref android.R.styleable#CompoundButton_button
*/
public void setButtonDrawable(@DrawableRes int resId) {
final Drawable d;
if (resId != 0) {
d = getContext().getDrawable(resId);
} else {
d = null;
}
setButtonDrawable(d);
}
/**
* Sets a drawable as the compound button image.
*
* @param drawable the drawable to set
* @attr ref android.R.styleable#CompoundButton_button
*/
@Nullable
public void setButtonDrawable(@Nullable Drawable drawable) {
if (mButtonDrawable != drawable) {
if (mButtonDrawable != null) {
mButtonDrawable.setCallback(null);
unscheduleDrawable(mButtonDrawable);
}
mButtonDrawable = drawable;
if (drawable != null) {
drawable.setCallback(this);
drawable.setLayoutDirection(getLayoutDirection());
if (drawable.isStateful()) {
drawable.setState(getDrawableState());
}
drawable.setVisible(getVisibility() == VISIBLE, false);
setMinHeight(drawable.getIntrinsicHeight());
applyButtonTint();
}
}
}
結(jié)論
RadioButton和CheckBox都是Android app中常用的Widget,它們派生于CompoundButton,允許使用者自行設(shè)置背景和按鈕的樣式,不過(guò),有時(shí)我們僅希望簡(jiǎn)單的設(shè)置一個(gè)有狀態(tài)的背景,并隱藏其默認(rèn)樣式??墒?,當(dāng)我們調(diào)用setButtonDrawable(null)或setButtonDrawable(0)時(shí),卻發(fā)現(xiàn)完全沒(méi)有效果。原來(lái),CompoundButton的setButtonDrawable的代碼實(shí)現(xiàn)中屏蔽了null或resid為0的Drawable,迫使我們必須傳入有效的Drawable對(duì)象。
這時(shí)候,透明顏色就可以派上用場(chǎng)了:
button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
參考:
隱藏RadioButton, CheckBox圖片 setButtonDrawable:
RadioButton和CheckBox都是Android app中常用的Widget,它們派生于CompoundButton,允許使用者自行設(shè)置背景和按鈕的樣式,不過(guò),有時(shí)我們僅希望簡(jiǎn)單的設(shè)置一個(gè)有狀態(tài)的背景,并隱藏其默認(rèn)樣式??墒?,當(dāng)我們調(diào)用setButtonDrawable(null)或setButtonDrawable(0)時(shí),卻發(fā)現(xiàn)完全沒(méi)有效果。原來(lái),CompoundButton的setButtonDrawable的代碼實(shí)現(xiàn)中屏蔽了null或resid為0的Drawable,迫使我們必須傳入有效的Drawable對(duì)象。
這時(shí)候,透明顏色就可以派上用場(chǎng)了:
button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android實(shí)現(xiàn)輸入法彈出時(shí)把布局頂上去和登錄按鈕頂上去的解決方法
- android虛擬鍵盤(pán)彈出遮擋登陸按鈕問(wèn)題的解決方法
- Android防止按鈕過(guò)快點(diǎn)擊造成多次事件的解決方法
- Android Button 自帶陰影效果另一種解決辦法
- Android中EditText+Button組合導(dǎo)致輸入板無(wú)法收起的原因分析及解決辦法
- 實(shí)例詳解Android解決按鈕重復(fù)點(diǎn)擊問(wèn)題
- Android開(kāi)發(fā)軟鍵盤(pán)遮擋登陸按鈕的完美解決方案
- Android優(yōu)雅的方式解決軟鍵盤(pán)遮擋按鈕問(wèn)題
- Android編程出現(xiàn)Button點(diǎn)擊事件無(wú)效的解決方法示例
相關(guān)文章
解析android中系統(tǒng)日期時(shí)間的獲取
本篇文章是對(duì)在android中,如何系統(tǒng)日期時(shí)間獲取的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Android Touch事件分發(fā)過(guò)程詳解
這篇文章主要介紹了Android Touch事件分發(fā)過(guò)程,詳細(xì)描述了Android Touch事件的主要處理流程,有助于深入理解Android程序設(shè)計(jì),需要的朋友可以參考下2014-09-09
淺析Android中build.gradle的實(shí)用技巧
這篇文章主要介紹了淺析Android中build.gradle的實(shí)用技巧,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
詳解Android Webview加載網(wǎng)頁(yè)時(shí)發(fā)送HTTP頭信息
這篇文章主要介紹了詳解Android Webview加載網(wǎng)頁(yè)時(shí)發(fā)送HTTP頭信息的相關(guān)資料,需要的朋友可以參考下2017-05-05
詳解Android Studio中Git的配置及協(xié)同開(kāi)發(fā)
這篇文章主要介紹了詳解Android Studio中Git的配置及協(xié)同開(kāi)發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

