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 资讯阅读器的更多相关文章
- android 资讯阅读器(二)
接着上次的博客,上次移植完了tab以后整个app的框架就算是定下来了. 本次目标: 1.数据的获取与展示(ListView) 2.官方的下拉刷新效果(SwipeRefreshLayout) 3.数据接 ...
- android rss阅读器开发一点小技巧
这几天一直在学习开发Rss阅读器,遇到一个很坑的问题,InputSource这里总是出错.弄了好久,终于让我找到一个解决方法----看代码: new Thread(){ @Override publi ...
- Android NurReaderView 阅读器 (字符串-.txt文件)
有些地方还没配置好.2/3天后在更新.... 功能 支持字符串和<.txt>文件 文字自动分各个页面 支持从右到左-(从右边开始的语言.比如维吾尔语哈扎克语...外国的阿拉伯语等) 支持自 ...
- android优化中国风应用、完整NBA客户端、动态积分效果、文件传输、小说阅读器等源码
Android精选源码 android拖拽下拉关闭效果源码 一款优雅的中国风Android App源码 EasySignSeekBar一个漂亮而强大的自定义view15 android仿蘑菇街,蜜芽宝 ...
- 电子书及阅读器Demo
电子书阅读器(Kindle,电子纸技术.LCD.电子墨水技术等: 亚马逊/当当网站) 电子书产业可分5大环节:内容供应商.数字格式制作商.内容流通服务平台.传输平台以及终端阅读器产品. 全球电子书市 ...
- Android IT资讯网络阅读器应用源码
这个是Android IT资讯网络阅读器应用,也是一款通过jsoup解析Html获取内容的网络阅读器,和前面的其实是类似的,也是大学时期闲暇完成,对照CSDN的Web页面元素设计进行解析提取内容,核心 ...
- Android 上的代码阅读器 CoderBrowserHD 修改支持 go 语言代码
我在Android上的代码阅读器用的是 https://github.com/zerob13/CoderBrowserHD 改造的版本,改造后的版本我放在 https://github.com/ghj ...
- 将批量下载的博客导入到手机后,通过豆约翰博客阅读器APP(Android手机)进行浏览,白字黑底,保护眼睛,图文并茂。
首先下面演示的博文来自于以下地址:http://www.douban.com/note/423939291/ 需要先通过博客备份专家将导出的博文导入到手机(还不会用的朋友请先阅读http://www. ...
- (android高仿系列)今日头条 --新闻阅读器 (三) 完结 、总结 篇
从写第一篇今日头条高仿系列开始,到现在已经过去了1个多月了,其实大体都做好了,就是迟迟没有放出来,因为我觉得,做这个东西也是有个过程的,我想把这个模仿中一步一步学习的过程,按照自己的思路写下来,在根据 ...
随机推荐
- 【OpenWRT之旅】LuCI探究
1. 多语言 1)检查: opkg list | grep luci-i18n- 2)安装语言包: opkg install luci-i18n-hungarian 2.uhttpd 这个是LuC ...
- MySQL Database on Azure 的用户名
MySQL Database on Azure是中国版Windows Azure上的一个PaaS服务,类似于AWS上的RDS.MySQL Database on Azure的用户名与on-premis ...
- 周五了啦啦啦啦-LAMP+PHP‘s OOP
hi 周五咯~~ 1.LAMP配置完结篇 五.LAMP配置环境优化 5.4 虚拟主机工作原理 apache的虚拟主机.virtual-host 用不同的域名访问不同的目录——手动模拟dns 修改hos ...
- 我的Github之旅(一)
第一站:本地环境中的Github配置 1.参考链接 作为初学者,需要了解的有[本地环境中的github配置(基于mac)][1],以及git知识,这里推荐一个网站[猴子都能懂的Git入门][2],最后 ...
- POJ3107Godfather[树形DP 树的重心]
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6121 Accepted: 2164 Descrip ...
- 使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍
使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 来自译者 markzhai:大家也知道最近 ...
- IT菜鸟的第2天(输入输出,数据类型,运算符的使用)
1:输入输出 另一种读写方法: 注释:Console.Write(Line{自动换行})是输入,string xxx = Console.ReadLine();是输出. string :字符串类型 ...
- Eclipse调整双击选取的字符颜色背景
Eclipse调整双击选取的字符颜色背景,如下图所示: 会有二点影响: 1. 编辑页的颜色 2. 右侧滚动条的小提示点的颜色.
- Android Fragment 你应该知道的一切
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42628537,本文出自:[张鸿洋的博客] 很久以前写过两篇Fragment的介绍 ...
- 改变TableView中的分割线位置
加上以下代码,可以让系统的分割线位置置于起始位置 #pragma mark --- 设置分割线位置为起始位置-(void)viewDidLayoutSubviews{ if ([self.tab ...