Android setButtonDrawable()的兼容問題解決辦法
Android setButtonDrawable()的兼容問題解決辦法
setButtonDrawable()的兼容問題
API16實現(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實現(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();
}
}
}
結論
RadioButton和CheckBox都是Android app中常用的Widget,它們派生于CompoundButton,允許使用者自行設置背景和按鈕的樣式,不過,有時我們僅希望簡單的設置一個有狀態(tài)的背景,并隱藏其默認樣式??墒牵斘覀冋{用setButtonDrawable(null)或setButtonDrawable(0)時,卻發(fā)現(xiàn)完全沒有效果。原來,CompoundButton的setButtonDrawable的代碼實現(xiàn)中屏蔽了null或resid為0的Drawable,迫使我們必須傳入有效的Drawable對象。
這時候,透明顏色就可以派上用場了:
button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
參考:
隱藏RadioButton, CheckBox圖片 setButtonDrawable:
RadioButton和CheckBox都是Android app中常用的Widget,它們派生于CompoundButton,允許使用者自行設置背景和按鈕的樣式,不過,有時我們僅希望簡單的設置一個有狀態(tài)的背景,并隱藏其默認樣式。可是,當我們調用setButtonDrawable(null)或setButtonDrawable(0)時,卻發(fā)現(xiàn)完全沒有效果。原來,CompoundButton的setButtonDrawable的代碼實現(xiàn)中屏蔽了null或resid為0的Drawable,迫使我們必須傳入有效的Drawable對象。
這時候,透明顏色就可以派上用場了:
button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
Android 點擊ImageButton時有“按下”的效果的實現(xiàn)
這篇文章主要介紹了 Android 點擊ImageButton時有“按下”的效果的實現(xiàn)的相關資料,需要的朋友可以參考下2017-03-03
Android?Flutter控件封裝之視頻進度條的實現(xiàn)
這篇文章主要來和大家分享一個很簡單的控制器封裝案例,包含了基本的播放暫停,全屏和退出全屏,文中的示例代碼講解詳細,感興趣的可以了解一下2023-06-06
android開發(fā)教程之使用listview顯示qq聯(lián)系人列表
這篇文章主要介紹了android使用listview顯示qq聯(lián)系人列表的示例,需要的朋友可以參考下2014-02-02
flutter Container容器實現(xiàn)圓角邊框
這篇文章主要為大家詳細介紹了flutter Container容器實現(xiàn)圓角邊框,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
Android開發(fā)中使用Volley庫發(fā)送HTTP請求的實例教程
這篇文章主要介紹了Android開發(fā)中使用Volley庫發(fā)送HTTP請求的實例教程,包括創(chuàng)建Volley單例的基本知識與取消Request請求的技巧等,需要的朋友可以參考下2016-05-05

