五个页面的基类BasePager
- BasePager的布局base_pager.xml
- 标题栏: RelativeLayout
- 内容部分: FrameLayout
- BasePager的方法
initView(),用于初始化公共部分视图,并且初始化加载子视图的FrameLayout
initData()初始化数据,当孩子需要初始化数据,或者绑定数据,联网请求数据并且绑定的时候,重写该方法
五个页面的实现
HomePager,
NewsCenterPager,
SmartServicePager,
GovaffairPager
SettingPager都继承BasePager
重写initData方法 ,添加子视图,并且绑定数据
配置新闻中心的联网请求
联网请求的ip和端口,web_home为服务器资源文件
public static final String BASE_URL = "http://192.168.1.100:80/web_home";
新闻中心的网络地址
public static final String NEWSCENTER_PAGER_URL = BASE_URL+"/static/api/news/categories.json";
使用OKHttp联网请求数据
private void getDataFromNet()
{
OkHttpUtils
.get()
.url(Constants.NEWSCENTER_PAGER_URL)
.build()
.execute(new StringCallback()
{
/**
* 当请求失败的时候回调
* @param call
* @param e
* @param id
*/
@Override
public void onError(Call call, Exception e, int id)
{
Log.e(TAG, "新闻中心请求失败==" + e.getMessage());
}
/**
* 当联网成功的时候回调
* @param response 请求成功的数据
* @param id
*/
@Override
public void onResponse(String response, int id)
{
Log.e(TAG, "新闻中心请求成功==" + response);
//解析数据
processData(response);
}
});
}
在NewsApplication中初始化OkhttpUtils
private void initOkhttpClient()
{
OkHttpClient okHttpClient = new OkHttpClient.Builder()
// .addInterceptor(new LoggerInterceptor("TAG"))
.connectTimeout(10000L, TimeUnit.MILLISECONDS)
.readTimeout(10000L, TimeUnit.MILLISECONDS)
//其他配置
.build();
OkHttpUtils.initClient(okHttpClient);
}
在NewsCenterPager类的initData()方法中先得到缓存数据,若没有缓存数据则联网请求数据
//得到缓存数据
String saveJson = CacheUtils.getString(context, Constants.NEWSCENTER_PAGER_URL);//""
if (!TextUtils.isEmpty(saveJson))
{
processData(saveJson);
}
//联网请求数据
getDataFromNet();
使用使用OKHttp联网请求数据成功后,缓存数据
/**
* 当联网成功的时候回调
* @param response 请求成功的数据
* @param id
*/
@Override
public void onResponse(String response, int id)
{
Log.e(TAG, "新闻中心请求成功==" + response);
//缓存数据
CacheUtils.putString(context, Constants.NEWSCENTER_PAGER_URL, response);
//解析数据
processData(response);
}
});
CacheUtils类中缓存数据及获取缓存数据的方法
/**
* 缓存文本数据
*
* @param context
* @param key
* @param value
*/
public static void putString(Context context, String key, String value)
{
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
///mnt/sdcard/beijingnews/files/llkskljskljklsjklsllsl
try
{
String fileName = MD5Encoder.encode(key);//llkskljskljklsjklsllsl
///mnt/sdcard/beijingnews/files/llkskljskljklsjklsllsl
File file = new File(Environment.getExternalStorageDirectory() + "/beijingnews/files", fileName);
File parentFile = file.getParentFile();//mnt/sdcard/beijingnews/files
if (!parentFile.exists())
{
//创建目录
parentFile.mkdirs();
}
if (!file.exists())
{
file.createNewFile();
}
//保存文本数据
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(value.getBytes());
fileOutputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
LogUtil.e("文本数据缓存失败");
}
}
else
{
SharedPreferences sp = context.getSharedPreferences("newsapp", Context.MODE_PRIVATE);
sp.edit().putString(key, value).commit();
}
}
/**
* 获取缓存的文本信息
*
* @param context
* @param key
* @return
*/
public static String getString(Context context, String key)
{
String result = "";
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
try
{
String fileName = MD5Encoder.encode(key);//llkskljskljklsjklsllsl
///mnt/sdcard/beijingnews/files/llkskljskljklsjklsllsl
File file = new File(Environment.getExternalStorageDirectory() + "/beijingnews/files", fileName);
if (file.exists())
{
FileInputStream is = new FileInputStream(file);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) != -1)
{
stream.write(buffer, 0, length);
}
is.close();
stream.close();
result = stream.toString();
}
}
catch (Exception e)
{
e.printStackTrace();
LogUtil.e("图片获取失败");
}
}
else
{
SharedPreferences sp = context.getSharedPreferences("newsapp", Context.MODE_PRIVATE);
result = sp.getString(key, "");
}
return result;
}
解析数据
/**
* 解析数据
*
* @param json
*/
private void processData(String json)
{
NewsCenterPagerBean2 bean = parsedJson2(json);
String title2 = bean.getData().get(0).getChildren().get(1).getTitle();
LogUtil.e("使用Gson解析json数据成功NewsCenterPagerBean2-title2-------------------------==" + title2);
//给左侧菜单传递数据
data = bean.getData();
MainActivity mainActivity = (MainActivity) context;
//得到左侧菜单
LeftmenuFragment leftmenuFragment = mainActivity.getLeftmenuFragment();
//添加详情页面
detaiBasePagers = new ArrayList<>();
detaiBasePagers.add(new NewsMenuDetailPager(context,data.get(0)));//新闻详情页面
detaiBasePagers.add(new TopicMenuDetailPager(context));//专题详情页面
detaiBasePagers.add(new PhotosMenuDetailPager(context));//图组详情页面
detaiBasePagers.add(new InteracMenuDetailPager(context));//互动详情页面
//把数据传递给左侧菜单
leftmenuFragment.setData(data);
}
使用Gson解析json数据
/**
* Gson解析json数据
*
* @param json
* @return
*/
private NewsCenterPagerBean2 parsedJson(String json)
{
return new Gson().fromJson(json, NewsCenterPagerBean2.class);
}
使用Android系统自带的API解析json数据
/**
* 使用Android系统自带的API解析json数据
*
* @param json
* @return
*/
private NewsCenterPagerBean2 parsedJson2(String json)
{
NewsCenterPagerBean2 bean2 = new NewsCenterPagerBean2();
try
{
JSONObject object = new JSONObject(json);
int retcode = object.optInt("retcode");
bean2.setRetcode(retcode);//retcode字段解析成功
JSONArray data = object.optJSONArray("data");
if (data != null && data.length() > 0)
{
List<NewsCenterPagerBean2.DetailPagerData> detailPagerDatas = new ArrayList<>();
//设置列表数据
bean2.setData(detailPagerDatas);
//for循环,解析每条数据
for (int i = 0; i < data.length(); i++)
{
JSONObject jsonObject = (JSONObject) data.get(i);
NewsCenterPagerBean2.DetailPagerData detailPagerData = new NewsCenterPagerBean2.DetailPagerData();
//添加到集合中
detailPagerDatas.add(detailPagerData);
int id = jsonObject.optInt("id");
detailPagerData.setId(id);
int type = jsonObject.optInt("type");
detailPagerData.setType(type);
String title = jsonObject.optString("title");
detailPagerData.setTitle(title);
String url = jsonObject.optString("url");
detailPagerData.setUrl(url);
String url1 = jsonObject.optString("url1");
detailPagerData.setUrl1(url1);
String dayurl = jsonObject.optString("dayurl");
detailPagerData.setDayurl(dayurl);
String excurl = jsonObject.optString("excurl");
detailPagerData.setExcurl(excurl);
String weekurl = jsonObject.optString("weekurl");
detailPagerData.setWeekurl(weekurl);
JSONArray children = jsonObject.optJSONArray("children");
if (children != null && children.length() > 0)
{
List<NewsCenterPagerBean2.DetailPagerData.ChildrenData> childrenDatas = new ArrayList<>();
//设置集合-ChildrenData
detailPagerData.setChildren(childrenDatas);
for (int j = 0; j < children.length(); j++)
{
JSONObject childrenitem = (JSONObject) children.get(j);
NewsCenterPagerBean2.DetailPagerData.ChildrenData childrenData = new NewsCenterPagerBean2.DetailPagerData.ChildrenData();
//添加到集合中
childrenDatas.add(childrenData);
int childId = childrenitem.optInt("id");
childrenData.setId(childId);
String childTitle = childrenitem.optString("title");
childrenData.setTitle(childTitle);
String childUrl = childrenitem.optString("url");
childrenData.setUrl(childUrl);
int childType = childrenitem.optInt("type");
childrenData.setType(childType);
}
}
}
}
}
catch (JSONException e)
{
e.printStackTrace();
}
return bean2;
}
根据位置切换详情页面
/**
* 根据位置切换详情页面
*
* @param position
*/
public void swichPager(int position)
{
//1.设置标题
tv_title.setText(data.get(position).getTitle());
//2.移除之前内容
fl_content.removeAllViews();//移除之前的视图
//3.添加新内容
MenuDetaiBasePager detaiBasePager = detaiBasePagers.get(position);//
View rootView = detaiBasePager.rootView;
detaiBasePager.initData();//初始化数据
fl_content.addView(rootView);
}
NewsMenuDetailPager新闻详情页面
页面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/tabPageIndicator"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1" />
<ImageButton
android:id="@+id/ib_tab_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@android:color/transparent"
android:padding="5dp"
android:src="@drawable/news_cate_arr" />
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
初始化视图和数据
@Override
public View initView()
{
View view = View.inflate(context, R.layout.newsmenu_detail_pager, null);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
tabPageIndicator = (TabPageIndicator) view.findViewById(R.id.tabPageIndicator);
ib_tab_next = (ImageButton) view.findViewById(R.id.ib_tab_next);
//设置点击事件
ib_tab_next.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);//setCurrentItem内部已处理越界
}
});
return view;
}
@Override
public void initData()
{
super.initData();
LogUtil.e("新闻详情页面数据被初始化");
//准备新闻详情页面的数据
tabDetailPagers = new ArrayList<>();
for (int i = 0; i < children.size(); i++)
{
tabDetailPagers.add(new TabDetailPager(context, children.get(i)));
}
//设置ViewPager的适配器
viewPager.setAdapter(new MyNewsMenuDetailPagerAdapter());
//ViewPager和TabPageIndicator关联
tabPageIndicator.setViewPager(viewPager);
//注意以后监听页面的变化 ,TabPageIndicator监听页面的变化
tabPageIndicator.setOnPageChangeListener(new MyOnPageChangeListener());
viewPager.setCurrentItem(tempPositon);
}
/**
* TabPageIndicator监听页面的变化
*/
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener
{
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
/**
*设置position为0时,左侧菜单可以滑动
* @param position
*/
@Override
public void onPageSelected(int position)
{
if (position == 0)
{
//SlidingMenu可以全屏滑动
isEnableSlidingMenu(SlidingMenu.TOUCHMODE_FULLSCREEN);
}
else
{
//SlidingMenu不可以滑动
isEnableSlidingMenu(SlidingMenu.TOUCHMODE_NONE);
}
}
@Override
public void onPageScrollStateChanged(int state)
{
}
}
/**
* 根据传人的参数设置是否让SlidingMenu可以滑动
*/
private void isEnableSlidingMenu(int touchmodeFullscreen)
{
MainActivity mainActivity = (MainActivity) context;
mainActivity.getSlidingMenu().setTouchModeAbove(touchmodeFullscreen);
}
/**
* ViewPager的适配器
*/
class MyNewsMenuDetailPagerAdapter extends PagerAdapter
{
@Override//得到页签页面的数据
public CharSequence getPageTitle(int position)
{
return children.get(position).getTitle();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
TabDetailPager tabDetailPager = tabDetailPagers.get(position);
View rootView = tabDetailPager.rootView;
tabDetailPager.initData();//初始化数据,不调该方法无数据
container.addView(rootView);
return rootView;
}
@Override
public int getCount()
{
return tabDetailPagers.size();
}
@Override
public boolean isViewFromObject(View view, Object object)
{
return view == object;
}
}
右上角下一个页签数据按钮

TabDetailPager各个页签详情页面
布局tabdetail_pager.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:cacheColorHint="@android:color/transparent"
android:divider="@null"
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
顶部新闻布局topnews.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="180dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="180dp"
android:layout_alignParentBottom="true"
android:background="#44000000"
android:padding="5dp">
<com.example.newsapp.view.HorizontalScrollViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="180dp" />
<RelativeLayout
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:text="王宝强和他老婆离婚"
android:textColor="@android:color/white" />
<LinearLayout
android:id="@+id/ll_point_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="8dp"
android:orientation="horizontal" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
初始化视图,且把顶部轮播图部分视图,以头的方式添加到ListView中
@Override
public View initView()
{
View view = View.inflate(context, R.layout.tabdetail_pager, null);
listview = (ListView) view.findViewById(R.id.listview);
View topNewsView = View.inflate(context, R.layout.topnews, null);
tv_title = (TextView) topNewsView.findViewById(R.id.tv_title);
viewPager = (HorizontalScrollViewPager) topNewsView.findViewById(R.id.viewpager);
ll_point_group = (LinearLayout) topNewsView.findViewById(R.id.ll_point_group);
//把顶部轮播图部分视图,以头的方式添加到ListView中
listview.addHeaderView(topNewsView);
return view;
}
初始化数据
@Override
public void initData()
{
super.initData();
url = Constants.BASE_URL + childrenData.getUrl();
//把之前缓存的数据取出
String saveJson = CacheUtils.getString(context, url);
if (!TextUtils.isEmpty(saveJson))
{
//解析数据和处理显示数据
processData(saveJson);
}
//联网请求数据
getDataFromNet();
}
联网请求数据
/**
* 联网请求数据
*/
private void getDataFromNet()
{
prePosition = 0;
LogUtil.e("url地址===" + url);
OkHttpUtils
.get()
.url(url)
.build()
.execute(new StringCallback()
{
/**
* 当请求失败的时候回调
* @param call
* @param e
* @param id
*/
@Override
public void onError(Call call, Exception e, int id)
{
LogUtil.e(childrenData.getTitle() + "页签数据请求失败==" + e.getMessage());
}
/**
* 当联网成功的时候回调
* @param response 请求成功的数据
* @param id
*/
@Override
public void onResponse(String response, int id)
{
//缓存数据
CacheUtils.putString(context, url, response);
LogUtil.e(childrenData.getTitle() + "页签数据请求成功==" + response);
//解析数据
processData(response);
}
});
}
处理数据
/**
* @param json
*/
private void processData(String json)
{
TabDetailPagerBean bean = parsedJson(json);
LogUtil.e(childrenData.getTitle() + "解析成功==" + bean.getData().getNews().get(0).getTitle());
//顶部轮播图数据
topnews = bean.getData().getTopnews();
//设置ViewPager的适配器
viewPager.setAdapter(new TabDetailPagerTopNewsAdapter());
//添加红点
addPoint();
//监听页面的改变,设置红点变化和文本变化
viewPager.addOnPageChangeListener(new MyOnPageChangeListener());
tv_title.setText(topnews.get(prePosition).getTitle());
//准备ListView对应的集合数据
news = bean.getData().getNews();
//设置ListView的适配器
adapter = new TabDetailPagerListAdapter();
listview.setAdapter(adapter);
}
Gson解析json数据
/**
* Gson解析json数据
*
* @param json
* @return
*/
private TabDetailPagerBean parsedJson(String json)
{
return new Gson().fromJson(json, TabDetailPagerBean.class);
}
添加Viewpager中显示图片数量的红点
/**
* 添加红点
*/
private void addPoint()
{
ll_point_group.removeAllViews();//移除所有的红点
for (int i = 0; i < topnews.size(); i++)
{
ImageView imageView = new ImageView(context);
//设置背景选择器
imageView.setBackgroundResource(R.drawable.point_selector);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DensityUtil.dip2px(context, 5), DensityUtil.dip2px(context, 5));
if (i == 0)
{
imageView.setEnabled(true);
}
else
{
imageView.setEnabled(false);
params.leftMargin = DensityUtil.dip2px(context, 8);
}
imageView.setLayoutParams(params);
ll_point_group.addView(imageView);
}
}
监听页面的改变,设置红点变化和文本变化
/**
* 监听页面的改变,设置红点变化和文本变化
*/
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener
{
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position)
{
//1.设置文本
tv_title.setText(topnews.get(position).getTitle());
//2.对应页面的点高亮-红色
//把之前的变成灰色
ll_point_group.getChildAt(prePosition).setEnabled(false);
//把当前设置红色
ll_point_group.getChildAt(position).setEnabled(true);
prePosition = position;
}
@Override
public void onPageScrollStateChanged(int state)
{
}
}
ViewPager的适配器
class TabDetailPagerTopNewsAdapter extends PagerAdapter
{
@Override
public int getCount()
{
return topnews.size();
}
@Override
public boolean isViewFromObject(View view, Object object)
{
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
ImageView imageView = new ImageView(context);
//设置图片默认北京
imageView.setBackgroundResource(R.drawable.home_scroll_default);
//x轴和Y轴拉伸
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//把图片添加到容器(ViewPager)中
container.addView(imageView);
TabDetailPagerBean.DataEntity.TopnewsData topnewsData = topnews.get(position);
//图片请求地址
String imageUrl = Constants.BASE_URL + topnewsData.getTopimage();
//联网请求图片
//请求图片使用glide
Glide.with(context)
.load(imageUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.news_pic_default)
.error(R.drawable.news_pic_default)
// .override(width, height) //图片显示的分辨率 ,像素值 可以转化为DP再设置
.centerCrop()
.fitCenter()
.into(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
container.removeView((View) object);
}
}
ViewPagerIndicator的使用
下载地址:
https://github.com/JakeWharton/ViewPagerIndicator
2.解压导入Android studio运行案例ViewPagerIndicator
3.开始集成-关联ViewPagerIndicator的库
4.写布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/tabPageIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
5.写代码
//ViewPager和TabPageIndicator关联
tabPageIndicator.setViewPager(viewPager);
//主页以后监听页面的变化 ,TabPageIndicator监听页面的变化
6.在适配器中重写getPagerTitle()
@Override
public CharSequence getPageTitle(int position) {
return children.get(position).getTitle();
}
7.设置样式
<activity android:name=".activity.MainActivity"
android:theme="@style/Theme.PageIndicatorDefaults"
></activity>
8.修改样式
<style name="Widget.TabPageIndicator" parent="Widget">
<item name="android:gravity">center</item>
<item name="android:background">@drawable/vpi__tab_indicator</item>
<item name="android:paddingLeft">22dip</item>
<item name="android:paddingRight">22dip</item>
<item name="android:paddingTop">12dp</item>
<item name="android:paddingBottom">12dp</item>
<item name="android:textAppearance">@style/TextAppearance.TabPageIndicator</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">@drawable/vpi__tab_textcolor_indicator</item>
<item name="android:maxLines">1</item>
</style>
9.修改背景vpi__tab_indicator.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/news_tab_item_bg_select" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/news_tab_item_bg_select" />
<!-- Pressed -->
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@android:color/transparent" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/news_tab_item_bg_select" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@android:color/transparent" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/news_tab_item_bg_select" />
</selector>
10.修改文字的颜色vpi__tab_textcolor_indicator.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:color="@android:color/black" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:color="@android:color/holo_red_light" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:color="@android:color/black" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:color="@android:color/holo_red_light" />
<!-- Pressed -->
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:color="@android:color/black" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:color="@android:color/holo_red_light" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:color="@android:color/black" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:color="@android:color/holo_red_light" />
</selector>
网友评论