如何实现这里的材料设计指南中指定的切换按钮?
它是否可以从 Android 设计支持库中直接使用,或者是否有任何第三方库可用?
如何实现这里的材料设计指南中指定的切换按钮?
它是否可以从 Android 设计支持库中直接使用,或者是否有任何第三方库可用?
我也在寻找类似的东西ToggleButtonBar
很长一段时间。
我能够通过滥用 RadioButtons 来实现它:
为了实现这个单选按钮栏,我ToggleButton
为单选按钮创建了一个样式并创建了一个 RadioGroup。
将此添加到您的 res/values/ styles.xml:
<style name="ToggleButton" parent="@android:style/Widget.CompoundButton.RadioButton">
<item name="android:foreground">?android:attr/selectableItemBackground</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">32dp</item>
<item name="android:background">@drawable/toggle_background</item>
<item name="android:button">@null</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:textAllCaps">true</item>
<item name="android:paddingRight">8dp</item>
</style>
为背景 ColorStateList 创建一个 res/drawable/ toogle_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_window_focused="false">
<color android:color="@color/toggle_hover" />
</item>
<item android:state_checked="false" android:state_window_focused="false">
<color android:color="@color/toggle_normal" />
</item>
<item android:state_checked="true" android:state_pressed="true">
<color android:color="@color/toggle_active" />
</item>
<item android:state_checked="false" android:state_pressed="true">
<color android:color="@color/toggle_active" />
</item>
<item android:state_checked="true" android:state_focused="true">
<color android:color="@color/toggle_hover" />
</item>
<item android:state_checked="false" android:state_focused="true">
<color android:color="@color/toggle_normal_off" />
</item>
<item android:state_checked="false">
<color android:color="@color/toggle_normal" />
</item>
<item android:state_checked="true">
<color android:color="@color/toggle_hover" />
</item>
</selector>
通过以下方式附加您的 res/values/ colors.xml:
<color name="toggle_hover">@color/gray</color>
<color name="toggle_normal">@color/gainsboro</color>
<color name="toggle_active">@color/silver</color>
<color name="toggle_normal_off">@color/darkgray</color>
<color name="gainsboro">#DCdCdC</color>
<color name="silver">#C0C0C0</color>
<color name="darkgray">#a9a9a9</color>
<color name="gray">#808080</color>
在您的布局文件中,使用此代码片段来创建材质切换按钮组。在我的情况下,它是activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:cardCornerRadius="2dp"
app:cardElevation="2dp">
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
style="@style/ToggleButton"
android:text="First" />
<RadioButton
style="@style/ToggleButton"
android:text="Second" />
<RadioButton
style="@style/ToggleButton"
android:text="Third" />
</RadioGroup>
</android.support.v7.widget.CardView>
</LinearLayout>
我使用 CardView 作为组的包装来实现圆角。不幸的是,在低于 Lollipop 的 Android 版本上,圆角会导致 CardView 出现填充。您肯定可以在此处使用其他颜色或图标而不是文本或两者都应用您自己的样式。只需为这些情况创建您自己的 StateLists。
切换按钮要求:
- 一组中至少有三个切换按钮
- 使用文本、图标或两者都标记按钮
推荐以下组合:
- 多个且未选中
- 独家和未选中
- 仅限独家
注意:要使用 CardView,您需要将它的依赖项添加到您的应用程序 build.gradle 文件中:
compile 'com.android.support:cardview-v7:25.0.1'
谷歌终于赶上了我们,现在材料库中有一个官方切换组:
https://material.io/components/buttons#toggle-button
我创建了一个符合 Material Design 指南的 ToggleButton 库:
https://github.com/rcketscientist/ToggleButtons
compile 'com.anthonymandra:ToggleButtons:2.0.0'
更新:现在有官方支持!有关链接/用法,请参阅下面的其他答案。
从支持库 v23.2 开始,当前ToggleButton
实现的行为和样式都不像参考的材料设计指南中所述。
材料指南:
当前支持库样式:
请注意,按钮不会以圆形边框包围的组中组合在一起,使用文本而不是图标,并且使用强调色作为下划线而不是深色背景来指示“打开”状态。
我不知道有任何事实上的标准库来实现 Material ToggleButton,但我希望那里可能有一些小的、几乎没有经过测试的库?不幸的是,Stackoverflow 不鼓励仅链接到外部第三方库的答案。所以你需要自己搜索,或者自己创建一个自定义视图来实现当前的材料设计指南。
我希望这可以帮助你!
http://takeoffandroid.com/android-views/material-toggle-switch-using-appcompat-v7/
进口:
import android.support.v7.widget.SwitchCompat;
import android.widget.CompoundButton;
swt = (SwitchCompat)findViewById(R.id.Switch);
swt.setOnCheckedChangeListener (this);
swt.setChecked (true);
听众:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.Switch:
if(!isChecked){
Toast.makeText (SwitchActivity.this,"Err Switch is off!!",Toast.LENGTH_SHORT).show ();
}else{
Toast.makeText (SwitchActivity.this,"Yes Switch is on!!",Toast.LENGTH_SHORT).show ();
}
break;
default:
break;
}
}
xml:
<android.support.v7.widget.SwitchCompat
android:id="@+id/Switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textOff=""
android:text="Toggle Switch"
android:background="@android:color/transparent"
android:textColor="@color/secondary_text"
android:textOn=""
android:button="@null"
android:padding="20dp"/>
借助材料组件库,您可以使用MaterialButtonToggleGroup
.
就像是:
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/toggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
style="?attr/materialButtonOutlinedStyle"
/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
style="?attr/materialButtonOutlinedStyle"
/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
style="?attr/materialButtonOutlinedStyle"
/>
</com.google.android.material.button.MaterialButtonToggleGroup>
如果您的活动具有向后兼容性,则可以使用SwitchCompat 。请参见下面的示例。
<android.support.v7.widget.SwitchCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"/>
快乐编码:D