我有一個幾乎完成的應用程序,它使用ExpandableListView和每個子行的單個切換按鈕。我可以使用CheckBox或ToggleButton,但底層的CompoundButton不支持水平居中的按鈕圖形(wtf?)。所以我 建立了我自己的,但不知何故使用它,而不是在列表視圖中呈現。(Expandable)ListView中的自定義CompoundButton不可點擊(但CheckBox是)
在常規佈局中,自定義複合按鈕可以很好地工作。
一些魔法咒語似乎丟失了,我不太確定那會是什麼。我會感謝你的任何見解。
package net.shangtai.listener;
import android.widget.CompoundButton;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
class ImageToggle extends CompoundButton {
private Drawable buttonDrawable;
public ImageToggle(Context context) {
super(context, null);
}
public ImageToggle(Context context, AttributeSet attrs) {
super(context, attrs, 0);
}
public ImageToggle(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setButtonDrawable(Drawable d) {
super.setButtonDrawable(d);
buttonDrawable=d;
}
@Override
protected void onDraw(Canvas canvas) {
if (buttonDrawable != null) {
final int gravity = getGravity();
final int height = buttonDrawable.getIntrinsicHeight();
final int width = buttonDrawable.getIntrinsicWidth();
int top=0;
int bottom=0;
int left=getWidth();
int right=getHeight();
switch (gravity) {
case Gravity.TOP:
top=0;
bottom=height;
break;
case Gravity.BOTTOM:
top=getHeight() - height;
bottom=0;
break;
case Gravity.CENTER_VERTICAL:
top=(getHeight() - height)/2;
bottom=top+height;
break;
case Gravity.LEFT:
left=0;
right=width;
break;
case Gravity.RIGHT:
left=getWidth() - width;
right=0;
break;
case Gravity.CENTER_HORIZONTAL:
left=(getWidth() - width)/2;
right=left+width;
break;
case Gravity.CENTER:
left=(getWidth() - width)/2;
right=left+width;
top=(getHeight() - height)/2;
bottom=top+height;
break;
}
buttonDrawable.setBounds(left, top, right, bottom);
buttonDrawable.draw(canvas);
}
}
}
謝謝,我也有一段時間回到你身邊,但這是一個偉大,清晰和詳盡的答案。我做了一個小測試,android:clickable可以像你所描述的那樣工作。 – Staffan