目标就是在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;
}
分享到:
相关推荐
1、为了解决ListView头部加ViewPager滑动冲突问题,必须自定义ListView,重写里面的onInterceptTouchEvent方法,ListView代码如下: package com.example.testa; import android.content.Context; import a
自定义PullToRefreshListView继承ListView,在ListView头部添加一个下拉的头部布局。跟ListView用法完全一致。 该自定义Listview代码详解具体可参考: //www.jb51.net/article/97845.htm 此处详细介绍Adapter的详细...
自定义上拉加载更多的ListView配合SwipeRefreshLayout实现列表刷新加载 详见:http://blog.csdn.net/u012080791/article/details/68941684
1. 使用ListView的`addHeaderView()`方法添加固定View作为列表的头部。 2. 通过自定义Adapter处理数据绑定,确保固定View与列表项正确显示。 3. 利用监听器捕获滚动事件,根据需要调整固定View的显示状态。 **源码...
本文实例为大家分享了Android ListView下拉顶部图片变大的具体代码,供大家参考,具体内容如下 在git上查看牛人的代码,发现是反编译别人的代码,还没加注释,代码也没有完全编译完整,所以这里我做的简单的注释,...
最近项目需要用到可以滑动删除并且带有上拉加载下拉刷新的Listview,查阅了一些资料,大多都是在SwipeMenuListView的基础上去添加头部和底部View,来扩展上拉加载和下拉刷新的功能,不过需要手动的去绘制UI及处理一些...
本文实例为大家分享了Android仿QQ可拉伸头部控件的具体实现代码,供大家参考,具体内容如下 该控件大致思路: 1.采用继承listview加入头部view。 2.监听listview滚动。 3.自定义动画回弹。 先看效果吧: ...
当用户下拉刷新时,控件将显示一个自定义的刷新头部,并在数据加载完成后自动隐藏。此外,它还支持设置刷新触发距离、刷新超时时间和刷新成功或失败的提示。 对于ListView版本,该控件允许您自定义列表项的布局和...
一个强大并且灵活的 Android RecyclerViewAdapter。 优化Adapter代码(减少百分之70%代码) 添加点击item点击、长按事件、以及item子控件的点击事件 添加加载动画(一行代码轻松切换5种默认动画) 添加头部、尾部...
本App可借鉴的地方:(做的烂的地方直接PASS吧) 1.包括底部的自定义类似iOS中的TabBar; 2.摇一摇功能。 3.页面收藏及Sqlite的使用。...6.ListView的自定义。 7.公共代码的抽取,包括XML布局文件中的头部与尾部
手把手教你实现如何自定义一个ExpandableListView,代码中含有大量注释,一看就懂,可以当做模板来用
design包的出现,Android界面发生了巨大变化,各种滑动配合的效果,下面我就粘性滑动中的一种进行自定义,效果图如下: 大家看到效果了,这里我是继承了LinerLayout,方便一点,若果是ViewGroup的话,也就复杂一...
UltimateRecyclerView是RecyclerView(ListView的高级和灵活版本),具有拉动刷新,加载更多内容,滑动以关闭,拖放,动画,粘页眉,滚动时显示或隐藏工具栏和FAB等许多功能。您可以使用它just like RecyclerView 。...
Android智能下拉刷新框架-SmartRefreshLayout | 中文 正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。它继承自...
首先在界面上,我们同样可以通过不同布局进行设计非常酷的界面,这些界面可以通 过include进行引入,和jsp、html也有相通的地方,同样在android上可以用到自定义的 样式这和css也有比较相通的地方,我们可以通过...
主要介绍了Anroid ListView分组和悬浮Header实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
其实写起来也比较简单,就是控制ListView的头部和底部的高度就可以了, 如果用RecycleView实现起来也是一样,只是RecycleView添加头和尾巴稍微麻烦一点,处理点击事件也不是很方便,所以就基于ListView去实现了。...
摘要:想必大家做开发的时候都会用到下拉刷新的控件,现在各种第三方的下拉刷新控件不胜枚举。当然最NB的还是XListView。...但是这里需要注意的是,如果头部自定义的布局文件含有ListView、GridView等这种控件,应
扩展自定义属性,添加下拉头部控件中文字自定义。 2016-12-02 FunGameRefreshView 支持 GridView, ListView, RecycleView 等一些控件 FunGameRefreshView 中只能放入一个子控件 修复游戏结束提示语未设置时,报错...