android 资讯阅读器

最近找申请到了一个不错的接口 , 非常适合拿来写一个资讯类的app.

现在着手写,随写随更.也算是抛砖引玉.烂尾请勿喷.╭(╯^╰)╮

第一阶段目标样式(滑动切换标签 , 侧滑菜单):

  

      图1                图2

首先我使用的ide 是android studio 2.0 已经集成了侧滑菜单的module

新建的时候选一下就好了.过程就不细说了.这个很简单.

下面就是实现滑动切换tab的效果啦.其实我这个写的并不是很好看,网上还有很多开源的滑动切寒tab的案例

盆友们可以自己去集成下.下面说下我的tab的实现效果(参考自:http://www.imooc.com/learn/264  大神鸿洋的慕课)

实现方法是viewpage+Fragment (单单用fragment并没有实现滑动效果).

如果你跟我一样用的是 图2 的模板 那么就要在content_main.xml下做如下修改

content_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.zfls.didainf.MainActivity"
    tools:showIn="@layout/app_bar_main"
    android:orientation="vertical">

   <include layout="@layout/topbar"/>

   <android.support.v4.view.ViewPager
       android:id="@+id/id_viewpager"
       android:layout_width="match_parent"
       android:layout_height="0dp"
       android:layout_weight="1" >
   </android.support.v4.view.ViewPager>

</LinearLayout>

使用的viewpage千万不要引入错咯.

topbar.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="wrap_content"
    android:background="?attr/colorPrimary"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/topical"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/topical_text_bg"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="热点"
            android:textColor="#fff"
            android:textSize="15dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/entertainment"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/entertainment_text_bg"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="娱乐"
            android:textColor="#fff"
            android:textSize="15dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/lettres"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/lettres_text_bg"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="美文"
            android:textColor="#fff"
            android:textSize="15dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/funny"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/funny_text_bg"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="搞笑"
            android:textColor="#fff"
            android:textSize="15dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/jokes"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/jokes_text_bg"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="段子"
            android:textColor="#fff"
            android:textSize="15dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/games"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/games_text_bg"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="游戏"
            android:textColor="#fff"
            android:textSize="15dp" />
    </LinearLayout>

</LinearLayout>

很好理解, topbar 就是做一个顶部的布局,然后放到整体的布局中去.

效果如下(还不错 O(∩_∩)O哈!):

放进整体布局后就如 图1 的样子.

下面再创建一个布局文件用来做每个模块的容器

tab_topcial.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">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swiperefreshlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ListView
            android:id="@+id/tab_topical_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>

这里说明下:

 <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swiperefreshlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

       ...

    </android.support.v4.widget.SwipeRefreshLayout>

SwipeRefreshLayout 是谷歌提供的下拉刷新模块.用它包裹listview 可以实现下拉刷新的效果(具体用法可以自行百度一下,或者等我再发一篇博客 嘿嘿)

下面是java代码了.

MainActivity.java :

package com.zfls.didainf;

import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener,View.OnClickListener {

    private ViewPager mViewPager;
    private FragmentPagerAdapter mAdapter;
    private List<Fragment> mFragments;

    //tab
    private LinearLayout topical;
    private LinearLayout entertainment;
    private LinearLayout lettres;
    private LinearLayout funny;
    private LinearLayout jokes;
    private LinearLayout games;

    private TextView topical_t;
    private TextView entertainment_t;
    private TextView lettres_t;
    private TextView funny_t;
    private TextView jokes_t;
    private TextView games_t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initside();

        initView();

        initWork();

        setSelect(0);
    }
   //统一监听
    private void initWork() {

        topical.setOnClickListener(this);
        entertainment.setOnClickListener(this);
        lettres.setOnClickListener(this);
        funny.setOnClickListener(this);
        jokes.setOnClickListener(this);
        games.setOnClickListener(this);

    }
   //声明相关控件
    private void initView() {
        mViewPager = (ViewPager) findViewById(R.id.id_viewpager);

        topical = (LinearLayout) findViewById(R.id.topical);
        entertainment = (LinearLayout) findViewById(R.id.entertainment);
        lettres = (LinearLayout) findViewById(R.id.lettres);
        funny = (LinearLayout) findViewById(R.id.funny);
        jokes = (LinearLayout) findViewById(R.id.jokes);
        games = (LinearLayout) findViewById(R.id.games);

        topical_t = (TextView) findViewById(R.id.topical_text_bg);
        entertainment_t = (TextView) findViewById(R.id.entertainment_text_bg);
        lettres_t = (TextView) findViewById(R.id.lettres_text_bg);
        funny_t = (TextView) findViewById(R.id.funny_text_bg);
        jokes_t = (TextView) findViewById(R.id.jokes_text_bg);
        games_t = (TextView) findViewById(R.id.games_text_bg);

        mFragments = new ArrayList<Fragment>();
        Fragment mTab01 = new TopicalFragment();
        Fragment mTab02 = new EntertainmentFragment();
        Fragment mTab03 = new LetteresFragment();
        Fragment mTab04 = new FunnyFragment();
        Fragment mTab05 = new JokesFragment();
        Fragment mTab06 = new GamesFragment();
        mFragments.add(mTab01);
        mFragments.add(mTab02);
        mFragments.add(mTab03);
        mFragments.add(mTab04);
        mFragments.add(mTab05);
        mFragments.add(mTab06);

        mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {

            @Override
            public android.support.v4.app.Fragment getItem(int position) {
                return mFragments.get(position);
            }

            @Override
            public int getCount() {
                return mFragments.size();
            }
        };
        mViewPager.setAdapter(mAdapter);

        mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                int currentItem = mViewPager.getCurrentItem();
                setTab(currentItem);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

    }

    //侧滑
    private void initside() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {
            // Handle the camera action
        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.topical:
                //热点
                setSelect(0);
                break;
            case R.id.entertainment:
                //娱乐
                setSelect(1);
                break;
            case R.id.lettres:
                //美文
                setSelect(2);
                break;
            case R.id.funny:
                //搞笑
                setSelect(3);
                break;
            case R.id.jokes:
                //段子
                setSelect(4);
                break;
            case R.id.games:
                //游戏
                setSelect(5);
                break;

            default:
                break;
        }
    }

    private void setSelect(int i) {
        setTab(i);
        mViewPager.setCurrentItem(i);
    }

   //修改被选中的tab 文字的背景颜色(R.color.color.colorAccent 在 res/value/colors.xml 下)
    private void setTab(int i) {

        changbg();
        switch (i){
            case 0:
                topical_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorAccent));
                break;
            case 1:
                entertainment_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorAccent));
                break;
            case 2:
                lettres_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorAccent));
                break;
            case 3:
                funny_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorAccent));
                break;
            case 4:
                jokes_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorAccent));
                break;
            case 5:
                games_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorAccent));
                break;
        }
    }
   //将所有文字背景色改成未选中状态
    private void changbg()
    {
        topical_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorWrite));
        entertainment_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorWrite));
        lettres_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorWrite));
        funny_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorWrite));
        jokes_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorWrite));
        games_t.setTextColor(ContextCompat.getColor(MainActivity.this , R.color.colorWrite));
    }
}

看起来挺多挺吓人,其实还好不算太多.

附件里面有鸿洋大神的demo,可以拿来移植一下.嘿嘿嘿

百度云链接 : http://pan.baidu.com/s/1boHCUbt

提取码:nhn2

移植完了以后就可以在手机上看下效果了.

时间: 2024-10-07 11:04:58

android 资讯阅读器的相关文章

基于Android小说阅读器滑动效果的一种实现

看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,等等.由于某种原因,突然想写一个简单点的滑动翻页效果.在这里写出来也没有什么意图,希望大家可以根据这个效果举一反三,写出其他的效果.图就不上了. 下面是代码:大家理解onTouch事件即可 package com.example.testscroll.view; import android.content.Context; import android.util.AttributeSet; import android.view

Android网络阅读器_jsoup解析应用

这是一款通过jsoup解析Html获取内容的网络阅读器,大学时期闲暇完成,对照CSDN的Web页面元素设计进行解析提取内容,核心功能就是使用jsoup解析.以下是相关截图: 核心解析代码: package com.weiyi.itreader.util; import java.util.ArrayList; import java.util.List; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jso

android rss阅读器开发一点小技巧

这几天一直在学习开发Rss阅读器,遇到一个很坑的问题,InputSource这里总是出错.弄了好久,终于让我找到一个解决方法----看代码: new Thread(){ @Override public void run() { try { URL url = new URL(RSS_URL); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser();

电子书及阅读器Demo

电子书阅读器(Kindle,电子纸技术.LCD.电子墨水技术等: 亚马逊/当当网站)  电子书产业可分5大环节:内容供应商.数字格式制作商.内容流通服务平台.传输平台以及终端阅读器产品. 全球电子书市场上,亚马逊占据第一位置,紧随其后的是索尼,而中国电子书领先企业汉王科技位居第三.在中国,汉王已经占据了该领域核心地位. - 硬件 + 软件 + 内容(书籍,纸质书电子书) 电子书的主要格式有PDF.TXT.EXE.CHM.UMD.PDG.JAR.PDB.BRM.EPUB.HLP.HTML.LIT.

Android IT资讯网络阅读器应用源码

这个是Android IT资讯网络阅读器应用,也是一款通过jsoup解析Html获取内容的网络阅读器,和前面的其实是类似的,也是大学时期闲暇完成,对照CSDN的Web页面元素设计进行解析提取内容,核心功能就是使用jsoup解析.以下是相关截图. 源码下载: http://code.662p.com/view/9746.html 运行截图 运行截图 运行截图 详细说明:http://android.662p.com/thread-6090-1-1.html

Android IT资讯网络阅读器_jsoup解析

这是一款通过jsoup解析Html获取内容的网络阅读器,和前面的其实是类似的,也是大学时期闲暇完成,对照CSDN的Web页面元素设计进行解析提取内容,核心功能就是使用jsoup解析.以下是相关截图 下载地址:http://www.nduoa.com/apk/detail/434393 代码下载:http://download.csdn.net/detail/weiyirong/7803851

Android IT资讯网络阅读器

这是一款通过jsoup解析Html获取内容的网络阅读器,和前面的其实是类似的,也是大学时期闲暇完成,对照CSDN的Web页面元素设计进行解析提取内容,核心功能就是使用jsoup解析.以下是相关截图. 下载地址:http://www.devstore.cn/code/info/496.html 运行截图:   

Android阅读器的思路(一)

最近工作业务中遇到了,Android阅读器的需求.面临的第一个问题就是,如何根据屏幕的大小,将一本小说分成每一页需要显示的内容.简单来说,就是把一整本小说的String变成每一页恰好可以显示的String组成一个String[]. 首先,我们要取得显示区域的宽高——width,height. 然后,计算出,在当前字体大小下,一屏可以显示的行数rowCount. 接下来,设置字体大小.对齐方式 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.se

开源android豆瓣电影阅读器

学习andorid开发有一段时间了,做了个小应用--豆瓣电影阅读器,作为这一阶段学习的一个总结.当前实现了基本的阅读器功能,更多丰富的特性,后续会进一步添加. 代码托管在github上,https://github.com/zhaoyu87/DouBan,需要的同学可以下载 应用主要分为两块: 1. 数据内容,http访问豆瓣api获取JSON格式的电影信息 2. 显示界面,使用了一个ListView来显示电影列表,和一个WebView来显示电影详情,如下所示: 1. 数据内容,http访问豆瓣