组合控件——底部标签栏——自定义标签按钮

 

 

 

 

 

 

 

 

 

 

自定义标签按钮的步骤

 

(1)定义一个状态图形的XML描述文件,当状态为选中时展示高亮图标,其余情况展示普通图标;


(2)在活动页面的XML文件中添加CheckBox节点,并给该节点的background、drawableTop、textColor三个属性分别设置对应的状态图形;


(3)活动页面的Java代码给复选框ck_tab设置勾选监听器,用来监听复选框的选中事件和取消选中事件;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

==========================================================================================================

 

 

 

 

 

 

 

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="35dp">

    <!-- 复选框的背景、文字颜色和顶部图标都采用了状态图形,看起来像个崭新的标签控件 -->
    <CheckBox
        android:id="@+id/ck_tab"
        android:layout_width="100dp"
        android:layout_height="94dp"
        android:background="@drawable/tab_bg_selector"
        android:button="@null"
        android:drawableTop="@drawable/tab_first_selector"
        android:gravity="center"
        android:padding="5dp"
        android:text="点我"
        android:textColor="@drawable/tab_text_selector"
        android:textSize="25sp" />

    <TextView
        android:id="@+id/tv_select"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这里查看标签选择结果"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="40dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal">

        <CheckBox
            style="@style/TabButton"
            android:checked="true"
            android:drawableTop="@drawable/tab_first_selector"
            android:text="首页" />

        <CheckBox
            style="@style/TabButton"
            android:drawableTop="@drawable/tab_second_selector"
            android:text="分类" />

        <CheckBox
            style="@style/TabButton"
            android:drawableTop="@drawable/tab_third_selector"
            android:text="购物车" />
    </LinearLayout>

</LinearLayout>

 

 

 

 

 

 

 

 

 

 

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/tab_bg_selected" />
    <item android:drawable="@drawable/tab_bg_normal" />
</selector>

 

 

 

 

 

 

 

 

 

 

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/tab_first_pressed" />
    <item android:drawable="@drawable/tab_first_normal" />
</selector>

 

 

 

 

 

 

 

 

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/tab_third_pressed" />
    <item android:drawable="@drawable/tab_third_normal" />
</selector>

 

 

 

 

 

 

 

 

 

 

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/tab_text_selected" />
    <item android:color="@color/tab_text_normal" />
</selector>

 

 

 

 

 

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
    <color name="black">#000000</color>
    <color name="white">#ffffff</color>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="tab_text_selected">#0084e8</color>
    <color name="tab_text_normal">#7597b3</color>
</resources>

 

 

 

 

 

 

 

 

 

 

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="customButtonStyle">@style/CommonButton</item>
    </style>

    
    <style name="CommonButton">
        <item name="android:textAllCaps">false</item>
        <item name="android:textColor">#000000</item>
        <item name="android:textSize">20sp</item>
    </style>



    <style name="TabButton">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:layout_weight">1</item>
        <item name="android:padding">5dp</item>
        <item name="android:gravity">center</item>
        <item name="android:background">@drawable/tab_bg_selector</item>
        <item name="android:textSize">12sp</item>
        <item name="android:textColor">@drawable/tab_text_selector</item>
        <item name="android:button">@null</item>
    </style>



</resources>

 

 

 

 

 

 

 

 

 

 

主代码:

package com.example.myapplication;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final TextView tv_select = findViewById(R.id.tv_select);
        
        
        CheckBox ck_tab = findViewById(R.id.ck_tab);

        // 给复选框设置勾选监听器
        ck_tab.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if (buttonView.getId() == R.id.ck_tab)
                {
                    String desc = String.format("标签按钮被%s了", isChecked?"选中":"取消选中");
                    tv_select.setText(desc);
                }
            }
        });
    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=======================================================================================================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-09-04 14:06  小白龙白龙马  阅读(67)  评论(0编辑  收藏  举报