下面主要整理下关于新闻首页的开发,最终效果图如下

本节主要先说下关于标题顶部栏和导航栏的UI处理,主要用到知识点有:

1.CoordinatorLayout :

用来协调子view. 具体详细描述,可以参照这篇博客: CoordinatorLayout的使用如此简单

2.ToolBar:

 Toolbar 使用来替代原来的ActionBar。一个Toolbar 从左到右包括了 一个navigation button、一个logo、一个title和subtitle、一个或多个自定义的View和一个 action menu 这5部分。也就是这个ViewGroup 容器里面包含了这五部分内容

3.AppBarLayout:

AppbarLayout继承自LinearLayout,它就是一个垂直方向的LinearLayout,在LinearLayout的基础上添加了滑动手势。它可以让你定制在某个可滑动的View(如:ScrollView ,ListView ,RecyclerView 等)滑动手势发生改变时,内部的子View 该做什么动作.

内部的子View通过在布局中加app:layout_scrollFlags设置执行的动作。

通过CoordinatorLayout +AppBarLayout+ToolBar,就可以实现一个可根据滑动view进行滑动的顶部栏。具体详细描述,可以参照这篇博客  玩转AppBarLayout,更酷炫的顶部栏。

上面主要整理了一些项目中顶部栏所用到的一些控件,接下来说下导航栏的处理。导航栏主要是通过TabLayout+ViewPager+Fragment来实现。

关于TabLayout的相关详细介绍,可以参照这篇博客  Design库-TabLayout属性详解

下面列下一些核心代码:

1.布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><!--AppBarLayout内部的子View通过在布局中加app:layout_scrollFlags设置执行的动作具体的值有:1.scroll —— 值设置为scroll的view会根据对应的滚动事件一起滚动2.enterAlways —— 值设为enterAlways的View,当对应滚动视图往下滚动时,该View会直接往下滚动。而不用考虑对应滚动视图是否在滚动3.exitUntilCollapsed:—— 值设为exitUntilCollapsed的View,当这个View要往上逐渐“消逝”时,会一直往上滑动,直到剩下的的高度达到它的最小高度后,再响应对应滚动视图的内部滑动事件4.enterAlwaysCollapsed:是enterAlways的附加选项,一般跟enterAlways一起使用,它是指,View在往下“出现”的时候,首先是enterAlways效果,当View的高度达到最小高度时,View就暂时不去往下滚动,直到对应滚动视图滑动到顶部不再滑动时,View再继续往下滑动,直到滑到View的顶部结束--><android.support.design.widget.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/colorPrimary"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"app:layout_scrollFlags="scroll|enterAlways"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="新闻"android:textColor="@color/white"android:textSize="22sp"/></android.support.v7.widget.Toolbar><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><!--TabLayout中一些属性的说明app:tabTextColor         :设置未选中字体的颜色app:tabSelectedTextColor :设置选中字体的颜色app:tabIndicatorColor    :设置指示器下标的颜色app:tabBackground        :设置整个TabLayout的颜色app:tabIndicatorHeight   :设置指示器下标的宽度--><android.support.design.widget.TabLayoutandroid:id="@+id/tablayout"android:layout_width="0dp"android:layout_height="40dp"app:tabTextColor="@color/alpha_50_white"app:tabSelectedTextColor="@color/white"app:tabMode="scrollable"android:layout_weight="1"></android.support.design.widget.TabLayout><ImageViewandroid:id="@+id/addimg"android:layout_width="40dp"android:layout_height="40dp"android:background="@drawable/ic_add_white_18dp"/></LinearLayout></android.support.design.widget.AppBarLayout><android.support.v4.view.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"></android.support.v4.view.ViewPager><android.support.design.widget.FloatingActionButtonandroid:id="@+id/floatingButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_arrow_upward"android:layout_gravity="bottom|right"android:layout_margin="16dp"/></android.support.design.widget.CoordinatorLayout>

2.相关java代码:

package com.jkxy.leijx.app_myfirstproject.module.Activity;import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
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.MenuItem;
import android.view.View;
import android.widget.Toast;import com.jkxy.leijx.app_myfirstproject.R;
import com.jkxy.leijx.app_myfirstproject.module.Fragment.NewsFragment;import java.util.ArrayList;
import java.util.List;/*** Created by leijx on 2017/9/15.*/public class HomepageActivity extends AppCompatActivity {private Toolbar toolbar;private DrawerLayout drawerlayout;private ActionBarDrawerToggle mActionBarDrawerToggle;private TabLayout tablayout;private ViewPager viewpager;NewsFragment fragment;private Context context = HomepageActivity.this;private String[] list = {"头条","科技","财经","军事","体育"};private List<NewsFragment> fragmentList = new ArrayList<NewsFragment>();@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_homepage_layout);initfragments();initview();}/*** 初始化fragments列表*/private void initfragments() {for(int i=0;i<5;i++){NewsFragment newsFragment = new NewsFragment();Bundle bundle = new Bundle();bundle.putInt("index", i);newsFragment.setArguments(bundle);fragmentList.add(newsFragment);}}private void initview() {toolbar = (Toolbar) findViewById(R.id.toolbar);drawerlayout = (DrawerLayout) findViewById(R.id.drawerlayout);tablayout = (TabLayout) findViewById(R.id.tablayout);viewpager = (ViewPager) findViewById(R.id.viewpager);toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);  //设置navigation buttontoolbar.setTitle("");                                      //设置标题setSupportActionBar(toolbar);                              //使用toolbar来替代系统自带的actionbar控件mActionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerlayout,toolbar,R.string.opne_drawer,R.string.close_drawer){@Overridepublic void onDrawerOpened(View drawerView) {
//                invalidateOptionsMenu();}@Overridepublic void onDrawerClosed(View drawerView) {
//                invalidateOptionsMenu();}};mActionBarDrawerToggle.syncState();//        tablayout.addTab(tablayout.newTab().setText(list[0]));
//        tablayout.addTab(tablayout.newTab().setText(list[1]));
//        tablayout.addTab(tablayout.newTab().setText(list[2]));
//        tablayout.addTab(tablayout.newTab().setText(list[3]));
//        tablayout.addTab(tablayout.newTab().setText(list[4]));tablayout.setupWithViewPager(viewpager);   //设置与viewpage联动  此处注意,设置后,会导致之前设置的Tab被清除tablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Overridepublic void onTabSelected(TabLayout.Tab tab) {Toast.makeText(context,tab.getText()+"被点击了",Toast.LENGTH_LONG).show();}@Overridepublic void onTabUnselected(TabLayout.Tab tab) {}@Overridepublic void onTabReselected(TabLayout.Tab tab) {}});viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {@Overridepublic NewsFragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return fragmentList.size();}//通过重写getPageTitle方法来设置TabLayout的相关Tab@Overridepublic CharSequence getPageTitle(int position) {return list[position];}});}@Overrideprotected void onPause() {super.onPause();}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if(mActionBarDrawerToggle.onOptionsItemSelected(item)){return true;}return super.onOptionsItemSelected(item);}@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);// Pass any configuration change to the drawer togglsmActionBarDrawerToggle.onConfigurationChanged(newConfig);}}

练习项目 一款新闻app的开发 (二) : 新闻首页开发(整体UI架构)相关推荐

  1. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  2. html+css+js+Hbuilder开发一款安卓APP,根本不用学Android开发!

    我们知道,要做一款安卓APP,咱们得先学安卓开发语言,例如java,前端后端.那么没有这些开发语言基础,咱们怎么做呢?其实现在有比较好的开发方案就是做webAPP,咱们可以用web前端知识构建安卓客户 ...

  3. html如何在手机上实现hb,html+css+js+Hbuilder开发一款安卓APP,根本不用学Android开发!...

    我碎前整要们开自近事端个广的的带近事端个广们知道,要做一款安卓APP,咱们得先学安卓开发语言,例如java,前端后端.那么没有这些开发语言基础,咱们怎么做呢?其实现在有比较好的开发方案就是做webAP ...

  4. Vue项目supermall仿蘑菇街详解(一)首页开发详解

    前言 本文章是对coderwhy vue项目仿蘑菇街做的一个步骤详解,此文章包含个人详解及主要步骤,由于代码较多较杂,就不放这了,代码大部分就用截图了 一.安装及创建 安装node,vue-cli,创 ...

  5. Android 天气APP(十二)空气质量、UI优化调整

    上一篇:Android 天气APP(十一)未来七天的天气预报.逐小时预报.UI优化 空气质量数据.UI优化 新版------------------- 一.自定义View 二.修改XML布局 三.添加 ...

  6. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·008【首页开发】

    注:前言.目录见 https://god-excious.blog.csdn.net/article/details/105312456 文章目录 [024]page-json配置 [025]图文.视 ...

  7. uni-app前端开发(二)新闻功能

    新闻功能 1.新闻列表 首先要在页面的onLoad函数中添加请求初始化分页获取新闻列表 1.1逻辑层 <script>// 此处将方法抽取到了/common/method.js中impor ...

  8. C++ QT结合FFmpeg实战开发视频播放器-08播放器项目的整体UI架构

    作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!

  9. 蓝牙mesh系统开发二 mesh节点开发

    前言 在开发蓝牙mesh系统中,使用泰凌微8258的蓝牙作为节点方案,本章讲解通过8258搭建普通mesh节点,ble mesh基础可以点这里 SDK获取 下载SIG MESH SDK mesh项目工 ...

最新文章

  1. Deepin 解决google chrome卡顿的问题
  2. 通过GeoIP2分析访问者IP获取地理位置信息
  3. hadoop 依赖式job_Hadoop Job使用第三方依赖jar文件
  4. Wince 隐藏TASKBAR的方法
  5. mysql启多_MySQL启多个实例
  6. 30个Linux安装案例,Make和Makefile说明,Linux工具,容器安全性,DevOps技巧等
  7. 让我当你的圣诞老人吧,派发3本技术好书
  8. [蓝桥杯]试题 基础练习 高精度加法
  9. ios build lame
  10. AD09 覆铜步骤及设计规则
  11. springboot 图片大小压缩
  12. gRPC如何在Golang和PHP中进行实战?7步教你上手!
  13. Amoeba配置读写分离
  14. 从基础接口工具postman开始夯实软件测试基础(一)
  15. sketch中制作蒙版及通道蒙版
  16. css锚点定位不准确问题
  17. MySQL——MySQL备份
  18. android源码编译并刷入nexus 6p手机
  19. 7-2 高精度求累加和 分数 25作者 胡伟平单位 广西科技大学
  20. 人类投资者VS人工智能,究竟谁会胜出?

热门文章

  1. 布线(Layout)设计概念
  2. 我的世界java边境之地_边境之地/Java版
  3. 蓝桥杯 python 杨辉三角
  4. Coursera连接不上的解决方法
  5. smart phonics
  6. IPV6的原理和配置
  7. 反射讲解,有错误的请见谅。
  8. 阿里云域名购买与设置并通过域名访问阿里云项目
  9. java如何实现邮箱注册
  10. 【踩坑记录】python环境已经安装win32api的前提下,仍报DLL load failed while importing win32api的解决方法