android – 特定的单选按钮 – 为第一个/最后一个按钮设置不同样式的最简单方法
作者:互联网
我想在我的布局中实现这种特定类型的单选按钮:
=第一项,中间项和最后一项的不同图形,它们具有不同的圆角.我可以想象为3种类型的按钮使用不同的样式(使用自定义样式,有状态的drawables).
我正在使用自定义切换按钮实现此功能.我想利用drawable选择器为第一个和最后一个项目使用不同的drawable,所以我使用:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_first="true"
android:drawable="@drawable/radio_left_act"/>
<item android:state_checked="true" android:state_last="true"
android:drawable="@drawable/radio_right_act"/>
<item android:state_checked="true"
android:drawable="@drawable/radio_middle_act"/>
<item android:state_checked="false" android:state_first="true"
android:drawable="@drawable/radio_left_inact"/>
<item android:state_checked="false" android:state_last="true"
android:drawable="@drawable/radio_right_inact"/>
<item android:state_checked="false"
android:drawable="@drawable/radio_middle_inact"/>
</selector>
但是现在我遇到了一个问题,状态state_first,state_last没有在我的LinearLayout中自动设置,所以我必须在每次单击按钮时手动设置它们.是否有某种方式,某些布局,这些状态是自动设置的?感谢您的任何帮助.
解决方法:
没有什么特别的,所以这是一个“默认”解决方案,带有自定义切换按钮.以下是第一个,中间和最后一个按钮的3种不同样式(放到styles.xml):
<!-- Toggle button styles -->
<style name="CustomToggle">
<item name="android:paddingTop">9dp</item>
<item name="android:paddingBottom">9dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">0dp</item>
<item name="android:layout_weight">1</item>
</style>
<style name="FirstToggle" parent="@style/CustomToggle">
<item name="android:background">@drawable/radio_first</item>
</style>
<style name="MiddleToggle" parent="@style/CustomToggle">
<item name="android:background">@drawable/radio_middle</item>
</style>
<style name="LastToggle" parent="@style/CustomToggle">
<item name="android:background">@drawable/radio_last</item>
</style>
以及用于处理切换按钮事件的活动的简短代码,因此同时只检查1个按钮,并禁用选中的按钮:
public class AktivityActivity extends Activity
{
ArrayList<ToggleButton> toggle_buttons;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.aktivity);
initToggleButtons();
}
private void initToggleButtons()
{
toggle_buttons = new ArrayList<ToggleButton>();
toggle_buttons.add((ToggleButton) findViewById(R.id.toggle_1));
toggle_buttons.add((ToggleButton) findViewById(R.id.toggle_2));
toggle_buttons.add((ToggleButton) findViewById(R.id.toggle_3));
// Listen on all toggle buttons
for (ToggleButton toggle_button : toggle_buttons)
toggle_button.setOnCheckedChangeListener(check_listener);
// Check first toggle button
updateToggleButtons(toggle_buttons.get(0));
}
// Only one toggle can be checked, and checked button must be disabled
private void updateToggleButtons(ToggleButton checked_button)
{
for (ToggleButton toggle_button : toggle_buttons)
{
toggle_button.setChecked(toggle_button == checked_button);
toggle_button.setEnabled(toggle_button != checked_button);
}
}
// Toggle buttons change listener
OnCheckedChangeListener check_listener = new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (isChecked)
updateToggleButtons((ToggleButton) buttonView);
}
};
}
也许它对某些人来说很有用……
标签:android,android-layout,radio-button,custom-controls,xml-drawable 来源: https://codeday.me/bug/20190621/1253173.html