Android switch定制左右可拉式
我正在尝试创建如下自定义开关:Android switch定制左右可拉式,android,android-switch,Android,Android Switch,我正在尝试创建如下自定义开关: <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:width="1dp" android:color="@color/text_input"/> <corners
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke
android:width="1dp"
android:color="@color/text_input"/>
<corners
android:radius="1dp"
android:bottomLeftRadius="4.5dp"
android:bottomRightRadius="4.5dp"
android:topLeftRadius="4.5dp"
android:topRightRadius="4.5dp" >
</corners>
</shape>
我觉得我需要的是一个左/右可绘制的东西,每一个都处于绿色/白色状态,或者是一个绿色的轮廓和一个可绘制的东西,以便选择
我不明白的是,在类似这样的帖子中,所有提供的示例Drawable都向右倾斜,而“on”按钮向左倾斜
我试着用下面的“拇指”来画
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/choice_right"/>
<item android:drawable="@drawable/choice_left"/>
</selector>
但它似乎切断了抽屉的末端。如果我还将轨迹设置为如下所示:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke
android:width="1dp"
android:color="@color/text_input"/>
<corners
android:radius="1dp"
android:bottomLeftRadius="4.5dp"
android:bottomRightRadius="4.5dp"
android:topLeftRadius="4.5dp"
android:topRightRadius="4.5dp" >
</corners>
</shape>
然后我得到的只是一条细线。因此,我不确定下一步要尝试什么。这不能仅用样式,这需要自定义视图实现。这是很多代码,所以我建议您使用第三方库,如
此库经过尝试和测试,因此使用它而不是重写它是安全的。更新答案 为此,应在drawable文件夹中创建图层列表 res/drawable/toggle_layerlist.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/choice_right">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke
android:width="1dp"
android:color="@color/text_input"/>
<corners
android:radius="1dp"
android:bottomLeftRadius="4.5dp"
android:bottomRightRadius="4.5dp"
android:topLeftRadius="4.5dp"
android:topRightRadius="4.5dp" >
</corners>
</shape>
</item>
</layer-list>
对其他状态执行相同操作您可以将RadioGroup与两个RadioButton一起使用:
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal">
<RadioButton
android:id="@+id/male_radio_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/selector_radio_btn_text"
android:background="@drawable/selector_radio_btn_left_bg"
android:gravity="center"
android:button="@null"
android:text="@string/male_radio_text"
/>
<RadioButton
android:id="@+id/female_radio_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/selector_radio_btn_text"
android:background="@drawable/selector_radio_btn_right_bg"
android:gravity="center"
android:button="@null"
android:text="@string/female_radio_text"/>
</RadioGroup>
其中选择器_radio_btn_text.xml是文本颜色选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/checkbox_text_color_checked"/>
<item android:state_checked="false" android:color="@color/checkbox_text_color"/>
和选择器_radio_btn_left_bg(right bg)。xml是左侧和右侧的背景我创建了一个示例应用程序,您可以找到它来解决您的问题。您可以查看具有段控制的正确实现的库 基本上,我创建了一个自定义控件,它扩展了
LinearLayout
,默认的weightSum
为2。添加了两个按钮
,其中权重
为1,并应用了一些逻辑在它们之间切换。切换时,将触发在此接口上构建的自定义事件
public interface SwitchToggleListener {
void onSwitchToggle(SwitchToggleState switchToggleState);
}
我使用drawable
资源来设置按钮的样式
最终的结果是这样的
与其使用任何外部库或支持库,还不如使用RadioGroup和单选按钮轻松完成。正如“迪米特里”在他的回答中提到的那样,我也用同样的方法实现了这一目标。 这是我给这个问题的答案的复印件
pink_out_line.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="#80000000" />
<stroke
android:width="1dp"
android:color="@color/pink" />
</shape>
切换_widget_background.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/pink" android:state_checked="true" />
<item android:drawable="@color/dark_pink" android:state_pressed="true" />
<item android:drawable="@color/transparent" />
</selector>
因此,也许答案是,这不是一个特别面向Android的设计,设计需要更改以更适合Android的UI元素。此设计源自iOS,但新的SwitchCompat小部件看起来与此小部件一样好和简单,所以请尝试一下。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="#80000000" />
<stroke
android:width="1dp"
android:color="@color/pink" />
</shape>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/pink" android:state_checked="true" />
<item android:drawable="@color/dark_pink" android:state_pressed="true" />
<item android:drawable="@color/transparent" />
</selector>