Mel*_*lde 19 user-interface android button togglebutton
在我一直在努力的应用程序中,我希望有一个多状态(在我的情况下,三个)切换按钮,而不是提供的两个ToggleButton.我已经尝试Button按照CompoundButton源代码开始扩展自己,但老实说,阅读它的来源有点压倒性.
有没有办法只使用选择器xml或其他东西做一个三态切换按钮,或者可能是另一种我没想过的方法?我不知道该怎么做.
jlh*_*ora 19
我实现了一个多状态切换按钮,源代码在这里
这是它的样子:

它很容易使用它:
<org.honorato.multistatetogglebutton.MultiStateToggleButton
android:id="@+id/mstb_multi_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
mstb:values="@array/planets_array" />
Run Code Online (Sandbox Code Playgroud)
在您的活动中:
MultiStateToggleButton button2 = (MultiStateToggleButton) this.findViewById(R.id.mstb_multi_id);
button2.setOnValueChangedListener(new ToggleButton.OnValueChangedListener() {
@Override
public void onValueChanged(int value) {
Log.d(TAG, "Value: " + value);
}
});
Run Code Online (Sandbox Code Playgroud)
dav*_*ron 12
您可以创建自定义ImageButton来实现此目的,在这种情况下您需要3个不同的图像.如果需要,您还可以添加更多状态.
public class FlashButton extends ImageButton {
public enum FlashEnum {
AUTOMATIC, ON, OFF
}
public interface FlashListener {
void onAutomatic();
void onOn();
void onOff();
}
private FlashEnum mState;
private FlashListener mFlashListener;
public FlashButton(Context context, AttributeSet attrs) {
super(context, attrs);
//Sets initial state
setState(FlashEnum.AUTOMATIC);
}
@Override
public boolean performClick() {
super.performClick();
int next = ((mState.ordinal() + 1) % FlashEnum.values().length);
setState(FlashEnum.values()[next]);
performFlashClick();
return true;
}
private void performFlashClick() {
if(mFlashListener == null)return;
switch (mState) {
case AUTOMATIC:
mFlashListener.onAutomatic();
break;
case ON:
mFlashListener.onOn();
break;
case OFF:
mFlashListener.onOff();
break;
}
}
private void createDrawableState() {
switch (mState) {
case AUTOMATIC:
setImageResource(R.drawable.ic_flash_auto);
break;
case ON:
setImageResource(R.drawable.ic_flash_on);
break;
case OFF:
setImageResource(R.drawable.ic_flash_off);
break;
}
}
public FlashEnum getState() {
return mState;
}
public void setState(FlashEnum state) {
if(state == null)return;
this.mState = state;
createDrawableState();
}
public FlashListener getFlashListener() {
return mFlashListener;
}
public void setFlashListener(FlashListener flashListener) {
this.mFlashListener = flashListener;
}
}
Run Code Online (Sandbox Code Playgroud)
RadioGroup为什么不在里面使用和设计收音机呢?
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="@drawable/your_drawable_selector"
android:button="@android:color/transparent"
android:gravity="center_horizontal" //center text
android:text="text"
/>
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30348 次 |
| 最近记录: |