其他分享
首页 > 其他分享> > android – 特定的单选按钮 – 为第一个/最后一个按钮设置不同样式的最简单方法

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