
目标就是在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; }