我的长大app开发教程第二弹:完成ContentFragment底部按钮
在开始之前,先上一张效果图
突然发现有点知乎的味道。。。的确。。知乎灰#989898,知乎蓝15,136,235(逃。。。。
1、学P图
想我大一的时候也用过不少Adobe的软件,昨天重新打开我的Photoshop,电脑提示缺少什么.dll文件,最后弄了一上午,是因为vc2012的运行库出了问题,最后发现一个软件特别好用:DirectX Repair,可以完美解决.dll丢失的问题。
UI素材我是在google的icons素材库下载的https://github.com/google/material-design-icons
图片变换颜色用到了Photoshop的油漆桶工具
这里每个按钮需要两种颜色,点击时可以达到变换的效果
最后还需要一个可以在页面底部放四个button的图片
最后把这些图片放进drawable-hdpi
2、ContentFragment中绑定控件
- package com.vitoyan.myangtzeu.fragment;
- import android.support.v4.view.ViewPager;
- import android.view.View;
- import android.widget.RadioGroup;
- import com.vitoyan.myangtzeu.R;
- import com.vitoyan.myangtzeu.base.BaseFragment;
- import com.vitoyan.myangtzeu.utils.LogUtil;
- /**
- * 作者:Vito-Yan
- * 作用:正文Fragment
- */
- public class ContentFragment extends BaseFragment {
- private ViewPager viewpager;
- private RadioGroup rg_main;
- @Override
- public View initView() {
- LogUtil.e("正文视图被初始化了");
- View view = View.inflate(context, R.layout.content_fragment,null);
- viewpager = view.findViewById(R.id.viewpager);
- rg_main = view.findViewById(R.id.rg_main);
- return view;
- }
- @Override
- public void initData() {
- super.initData();
- LogUtil.e("正文数据被初始化了");
- //设置默认选中首页
- rg_main.check(R.id.rb_home);
- }
- }
2、content_fragment.xml是底部按钮的布局文件,在线性布局中包裹RadioGroup,RadioGroup中包裹四个button
- <?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.vitoyan.myangtzeu.view.NoScrollViewPager
- android:id="@+id/viewpager"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1" />
- <RadioGroup
- android:id="@+id/rg_main"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/bottom_tab_bg"
- android:orientation="horizontal">
- <RadioButton
- android:id="@+id/rb_home"
- android:drawableTop="@drawable/rb_home_drawable_selector"
- android:gravity="center"
- android:text="首页"
- style="@style/bottom_tag_style"
- />
- <RadioButton
- android:id="@+id/rb_topic"
- android:drawableTop="@drawable/rb_topic_drawable_selector"
- android:gravity="center"
- android:text="话题"
- style="@style/bottom_tag_style"
- />
- <RadioButton
- android:id="@+id/rb_find"
- android:drawableTop="@drawable/rb_find_drawable_selector"
- android:gravity="center"
- android:text="发现"
- style="@style/bottom_tag_style"
- />
- <RadioButton
- android:id="@+id/rb_my"
- android:drawableTop="@drawable/rb_my_drawable_selector"
- android:gravity="center"
- android:text="我的"
- style="@style/bottom_tag_style"
- />
- </RadioGroup>
- </LinearLayout>
3、style.xm中的bottom_tag_style是公共的button属性
- <resources>
- <!-- Base application theme. -->
- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
- <!-- Customize your theme here. -->
- <item name="colorPrimary">@color/colorPrimary</item>
- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
- <item name="colorAccent">@color/colorAccent</item>
- </style>
- <style name="bottom_tag_style" >
- <!-- Customize your theme here. -->
- <item name="android:layout_width">wrap_content</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:layout_gravity">center_vertical</item>
- <item name="android:button">@null</item>
- <item name="android:drawablePadding">5dp</item>
- <item name="android:textColor">@drawable/bottom_textcolor_drawable_selector</item>
- <item name="android:textSize">14sp</item>
- <item name="android:layout_weight">1</item>
- </style>
- </resources>
4、NoScrollViewPager在布局文件中使用该类的时候,实例化该类用该构造方法,这个方法不能少,少的化会崩溃。
- package com.vitoyan.myangtzeu.view;
- import android.content.Context;
- import android.support.v4.view.ViewPager;
- import android.util.AttributeSet;
- import android.view.MotionEvent;
- /**
- * 作者:Vito-Yan
- * 作用:自定义不可以滑动的ViewPager
- */
- public class NoScrollViewPager extends ViewPager {
- /**
- * 通常在代码中实例化的时候用该方法
- * @param context
- */
- public NoScrollViewPager(Context context) {
- super(context);
- }
- /**
- * 在布局文件中使用该类的时候,实例化该类用该构造方法,这个方法不能少,少的化会崩溃。
- * @param context
- * @param attrs
- */
- public NoScrollViewPager(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- /**
- * 重写触摸事件,消费掉
- * @param ev
- * @return
- */
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- return true;
- }
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- return false;
- }
- }
5、解决底部按钮与android虚拟按键的冲突,在activity的onCreate方法中加入以下代码,可以屏蔽虚拟按键
- getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN);
具体的源代码可以在我的github上查看https://github.com/Vito-Yan/MYangtzeu
下面我们使用xutils来初始化控件,xutils3可以操作数据库,联网请求,初始化控件,加载图片。。。。
可以在github下载最新的xutils3,下载之后引入,修改build版本,关联库到app,在此不加赘述。
使用方法:在这里使用注解关联视图比以前更方便,之后也会用到xutils联网请求数据。
- package com.vitoyan.myangtzeu.fragment;
- import android.view.View;
- import android.widget.RadioGroup;
- import com.vitoyan.myangtzeu.R;
- import com.vitoyan.myangtzeu.base.BaseFragment;
- import com.vitoyan.myangtzeu.utils.LogUtil;
- import com.vitoyan.myangtzeu.view.NoScrollViewPager;
- import org.xutils.view.annotation.ViewInject;
- import org.xutils.x;
- /**
- * 作者:Vito-Yan
- * 作用:正文Fragment
- */
- public class ContentFragment extends BaseFragment {
- //2.初始化控件
- @ViewInject(R.id.viewpager)
- private NoScrollViewPager viewpager;
- @ViewInject(R.id.rg_main)
- private RadioGroup rg_main;
- @Override
- public View initView() {
- LogUtil.e("正文视图被初始化了");
- View view = View.inflate(context, R.layout.content_fragment,null);
- // viewpager = view.findViewById(R.id.viewpager);
- // rg_main = view.findViewById(R.id.rg_main);
- //1.把视图注入到框架中,让ContentFragment.this和View关联起来
- x.view().inject(ContentFragment.this,view);
- return view;
- }
- @Override
- public void initData() {
- super.initData();
- LogUtil.e("正文数据被初始化了");
- //设置默认选中首页
- rg_main.check(R.id.rb_home);
- }
- }
我的长大app开发教程第二弹:完成ContentFragment底部按钮的更多相关文章
- 我的长大app开发教程第一弹:Fragment布局
在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用. 在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准 ...
- 我的长大app开发教程第三弹:实现四个子页面绑定RadioButton
在开始之前先上一张图 在上一节中我们实现了底部Button,这一弹我们要实现点击四个按钮分别切换到不同页面,我们可以把页面分为两部分,顶部栏和中间内容部分,我们可以通过线性布局包裹两部分内容,顶部栏又 ...
- EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念
目录 1. 使用Anypoint Studio开发 2. Mule ESB Application Structure - Mule ESB应用程序结构 3. Mule ESB Application ...
- linux下开发c++第二弹--helloworld与makefile
一:hello world sudo vim hello.cpp 输入 g++ -o hello hello.cpp 获得hello 输入 ./hello 运行,显示结果hello world! ...
- DuiVision开发教程(18)-弹出窗
DuiVision的弹出窗体类CDlgPopup,是菜单.下拉列表等控件的父类,也能够单独使用,用于创建弹出窗体.弹出窗体默认是非激活状态下自己主动关闭,比如鼠标点击到弹出窗体外面的区域,弹出窗体就会 ...
- Delphi XE8 iOS与Android移动应用开发(APP开发)教程[完整中文版]
https://item.taobao.com/item.htm?id=536584650957&toSite=main
- EnjoyingSoft之Mule ESB开发教程第一篇:初识Mule ESB
目录 1. Mule ESB基本介绍 2. Mule ESB社区版和企业版 3. Mule ESB常用场景 4. Mule ESB软件安装 客户端安装 服务端安装 5. 第一个Mule ESB应用- ...
- EnjoyingSoft之Mule ESB开发教程系列第五篇:控制消息的流向-数据路由
目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流 ...
- EnjoyingSoft之Mule ESB开发教程第四篇:Mule Expression Language - MEL表达式
目录 1. MEL的优势 2. MEL的使用场景 3. MEL的示例 4. MEL的上下文对象 5. MEL的Variable 6. MEL访问属性 7. MEL操作符 本篇主要介绍Mule表达式语言 ...
随机推荐
- [HEOI2014]逻辑翻译(分治)
题目描述 在人类的神经系统中,每个信号都可以用?1或+1来表示.这些信号组合起来最后形成 了喜怒哀乐,酸甜苦辣,红黄绿蓝等各种各样的复杂信息.纳米探测科技的突破让生物学家 可以测量大脑中特定区域的完整 ...
- django pymysql
此处django版本为1.11.13 设置setting.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NA ...
- Java复习总结——注解
注解 概念及作用 概念 注解即元数据,就是源代码的元数据 注解在代码中添加信息提供了一种形式化的方法,可以在后续中更方便的 使用这些数据 Annotation是一种应用于类.方法.参数.变量.构造器及 ...
- hdu 2594 Simpsons’ Hidden Talents(扩展kmp)
Problem Description Homer: Marge, I just figured out a way to discover some of the talents we weren’ ...
- Linux下搜狗输入法和快捷键Ctrl+Space冲突的解决
配置快捷键(不是搜狗的设置) 把搜狗的启动快捷键给删了(如果有两个键盘[英+中],你按Shift就可以切换了,完全没必要占着茅坑) 其他快捷键冲突在键盘里面设置 over
- Windows Update第三方工具概览
受方程式黑客组织0Day攻击影响,所有的Windows服务器都要更新补丁. 方程式0day漏洞攻击介绍:https://zhuanlan.zhihu.com/p/26375989 腾讯云的解决方案:h ...
- C# Winfrom 发送邮件验证码&Timer控件
邮件发送: //定义一个全局的string类型的验证码: string yzm = ""; //定义一个字符串,这里面包含所有需要的验证码的元素: string a = " ...
- 用标准C编写COM dll
参考资料: 用标准C编写COM(一)COM in plain C,Part1 (http://blog.csdn.net/wangqiulin123456/article/details/809235 ...
- 关于MySQL锁的详解
有2种 1.表锁 2.行锁 支持 .innodb支持行锁,表级锁 .myisam只支持表级锁 innodb实现了下面2种标准的行级锁 .共享锁 S LOCK 允许事务读一行数据 .排他锁 X LOCK ...
- python 二维数组读入
study from : https://www.cnblogs.com/reaptomorrow-flydream/p/9613847.html python 二维数组键盘输入 1 m = int( ...