您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何解決在Android中使用setButtonDrawable()方法出現的兼容問題,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Android setButtonDrawable()的兼容問題解決辦法
setButtonDrawable()的兼容問題
API16實現
/** * 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實現
/** * 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,允許使用者自行設置背景和按鈕的樣式,不過,有時我們僅希望簡單的設置一個有狀態的背景,并隱藏其默認樣式。可是,當我們調用setButtonDrawable(null)或setButtonDrawable(0)時,卻發現完全沒有效果。原來,CompoundButton的setButtonDrawable的代碼實現中屏蔽了null或resid為0的Drawable,迫使我們必須傳入有效的Drawable對象。
這時候,透明顏色就可以派上用場了:
button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
參考:
隱藏RadioButton, CheckBox圖片 setButtonDrawable:
RadioButton和CheckBox都是Android app中常用的Widget,它們派生于CompoundButton,允許使用者自行設置背景和按鈕的樣式,不過,有時我們僅希望簡單的設置一個有狀態的背景,并隱藏其默認樣式。可是,當我們調用setButtonDrawable(null)或setButtonDrawable(0)時,卻發現完全沒有效果。原來,CompoundButton的setButtonDrawable的代碼實現中屏蔽了null或resid為0的Drawable,迫使我們必須傳入有效的Drawable對象。
這時候,透明顏色就可以派上用場了:
button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
關于如何解決在Android中使用setButtonDrawable()方法出現的兼容問題就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。