android listView头部自定义标签形式

本文详细介绍了如何在ListView头部实现自定义按钮效果,包括布局设计、样式定义及点击事件处理,通过XML文件和Java类实现了三个按钮的等分布局,并通过Selector实现了点击背景颜色变化的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标就是在ListView上面实现这个效果
首先我们定义头部相对应的xml文件(使用三个button来实现)使用android:layout_weight属性使三个button等分头部

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" android:id="@+id/select_layout"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="40dp" android:layout_weight="1"> <Button android:id="@+id/left_Btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="模拟题库" android:textSize="18.0sp" android:focusable="true" android:focusableInTouchMode="true" android:textColor="#FF3F3F3F" android:background="@drawable/header_button_selector" android:layout_centerInParent="true"/> </RelativeLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="40dp" android:layout_weight="1"> <Button android:id="@+id/center_Btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="真题库" android:textSize="18.0sp" android:focusable="true" android:focusableInTouchMode="true" android:textColor="#FF3F3F3F" android:background="@drawable/header_button_selector" android:layout_centerInParent="true"/> </RelativeLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="40dp" android:layout_weight="1"> <Button android:id="@+id/right_Btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="易错题库" android:focusable="true" android:focusableInTouchMode="true" android:textSize="18.0sp" android:textColor="#FF3F3F3F" android:background="@drawable/header_button_selector" android:layout_centerInParent="true"/> </RelativeLayout> </LinearLayout>

为了实现点击时候背景变色 需要定义header_button_selector 这个selector

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_window_focused="false" android:drawable="@color/white" > </item> <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/head_btn_bac" > </item> <item android:state_focused="false" android:state_pressed="true" android:drawable="@color/head_btn_bac" > </item> <item android:state_selected="true" android:drawable="@color/head_btn_bac" > </item> <item android:state_focused="true" android:drawable="@color/head_btn_bac" > </item> </selector>

我们定义一个类来创建头部的View。这样在Activity中就能复用

package com.up591.android.view.componet; import com.up591.android.R; import com.up591.android.common.var.ColorEx; import com.up591.android.common.var.Constants; import com.up591.android.common.var.SharedPreferenceConstants; import com.up591.android.util.SharedPreferencesUtil; import com.up591.android.view.MainActivity; import com.up591.android.view.PractiseActivity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class HeaderSelectView { private Activity activity; private Button leftBtn; private Button centerBtn; private Button rightBtn; public HeaderSelectView(Activity activity){ this.activity = activity; } public View build(){ View selectView = LayoutInflater.from(activity).inflate(R.layout.select_layout, null); leftBtn = (Button) selectView.findViewById(R.id.left_Btn); centerBtn = (Button) selectView.findViewById(R.id.center_Btn); rightBtn = (Button) selectView.findViewById(R.id.right_Btn); leftBtn.setText(Constants.bankTags[0]); centerBtn.setText(Constants.bankTags[1]); rightBtn.setText(Constants.bankTags[2]); int index = getIndex(activity); switch(index){ case 1://选中中间 setBtnFocusState(centerBtn); break; case 2: //选中右边 setBtnFocusState(rightBtn); break; default: //选中左边 默认 setBtnFocusState(leftBtn); break; } leftBtn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { setIndex(activity,0); forwardNewState(); } }); centerBtn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { setIndex(activity,1); forwardNewState(); } }); rightBtn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { setIndex(activity,2); forwardNewState(); } }); return selectView; } private void forwardNewState() { Intent intent = activity.getIntent(); if(activity.getClass().equals(PractiseActivity.class)){ intent.setClass(activity,MainActivity.class); }else{ intent.setClass(activity,activity.getClass()); } activity.startActivity(intent); } /** * 设置选中时候的状态 * @param button */ private void setBtnFocusState(Button button) { button.setTextColor(Color.WHITE); button.setBackgroundColor(ColorEx.HEAD_BTN_BAC); } /** * 获取得到当前选中的位置 * @return */ public static int getIndex(Context context) { SharedPreferencesUtil sp = SharedPreferencesUtil.getSyscfgSp(context); int index = sp.getIntValue(SharedPreferenceConstants.SYSCFG_QUESTIONS_TYPE_INDEX); return index; } /** * 设置选中的题库类型 */ public static void setIndex(Context context,int index){ SharedPreferencesUtil sp = SharedPreferencesUtil.getSyscfgSp(context); sp.putIntValue(SharedPreferenceConstants.SYSCFG_QUESTIONS_TYPE_INDEX, index); } }

这里面有一点需要特别说清楚的:
很多网络上说button的setBackgroudColor不能设置进去
本人在开始操作的时候也发现这个问题。后来测试中发现用Color类的颜色是可以的
其实这里面需要的是一个16进制的数而不是color.xml 中定义的资源。所以我们可以定义一个int常量传进去

package com.up591.android.common.var; public class ColorEx { /**头部按钮背景色--0xFFFEBE0C**/ public static final int HEAD_BTN_BAC = 0xFFFEBE0C; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值