android 资讯阅读器

Posted 我辈年轻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 资讯阅读器相关的知识,希望对你有一定的参考价值。

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

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

android 资讯阅读器

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

  

      图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

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

 

以上是关于android 资讯阅读器的主要内容,如果未能解决你的问题,请参考以下文章

onActivityResult 未在 Android API 23 的片段上调用

IDEA插件系列(67):ReadHub插件——新闻阅读器

RecyclerView holder中的Android Google Maps动态片段

Android 片段与复合控件

Android - 如何更改导航抽屉中的片段

Android - ViewStub