NewsApp03

作者: GeekGray | 来源:发表于2018-10-03 19:40 被阅读7次

阅读原文

五个页面的基类BasePager

  1. BasePager的布局base_pager.xml
  2. 标题栏: RelativeLayout
  3. 内容部分: FrameLayout
  4. 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;
        }
    }

右上角下一个页签数据按钮

image

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>

相关文章

  • NewsApp03

    阅读原文 顶部新闻轮播图事件处理 重写dispatchTouchEvent,并且要在按下的时候 判断滑动方向,在X...

  • NewsApp03

    阅读原文 五个页面的基类BasePager BasePager的布局base_pager.xml 标题栏: Rel...

网友评论

      本文标题:NewsApp03

      本文链接:https://www.haomeiwen.com/subject/exhtaftx.html