当前位置: 首页 > news >正文

从头开始敲代码之《从BaseApplication/Activity开始(三)》

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

转载请注明出处:王亟亟的大牛之路

上一篇写了对蓝牙,对NFC的监听实现,今天我们又给我们的BaseActivity加了一个<include>的操作以及实现了一个界面,上一篇请点击这里:从头开始敲代码之《从BaseApplication/Activity开始(二)》

总觉得,做事得有自己对自己所从事内容的理解,也许这不会让我们多挣钱,但我觉得会让我们活得明白

OK,那我们说下这篇我们做哪些点:
1.给我们的BaseActivity增添一个通用”TitleBar”
2.模拟一个界面,稳固下v4的 viewpager

OK 先贴一下我们的模仿对象
(9月2号开的服,8号开始玩了,嘿嘿 iOS 65可以一起来,之前也有玩过最近 又手贱开始玩了)

这里写图片描述

比较知名的手游我叫MT的主界面,白色部分是等会做的一个类似于GridView并且可以侧滑的View
红色部分是他的2个菜单的导航图标,但是我并没有做,理由等会诠释
我在蓝色部分添加了我们的”TitleBar”

OK 再贴一下我们的模仿结果

这里写图片描述

因为 没有素材我 全拿麦麦的图片做图标,集合里的内容作为文本的填充,其他功能基本实现了,上面一排的队伍内容我用一个大TextView冒充了,ok!!!!效果就是这样了,不许说难看!!

实现
1.上方的”Menu”是include进来的是我们BaseActivity的新内容,下面会帖代码
2.下方一大块区域实现了侧滑,点击选择的功能用的是常见的GridView+ViewPager。

思考
为什么MT中红色的部分为什么没有做Or为什么不做??
个人认为,这一类的点在page少的菜单类滑动视图中出现是很没有必要的。
Why?
诸如淘宝,大众点评等app首页的滑动切换图是展示类并且一般张数都很多,用户会忽略自己在哪一张,要去点哪张所以下面或者旁边加了一排小点来指引用户。

那么这一类的菜单类的界面还需要指引么?就2张视图并且视图的功能和呈现样式并不相同,那为什么还要 这 2个点呢?
而且,在原有设计中已有左右2个箭头,何不好好利用这2个箭头来告诉用户所处的位置呢?
(纯粹自己的观点,不喜勿喷,我们开发人员是创造着,我们应该对自己做的东西有一定的思考和判别的能力,并不是美工说怎么做就怎么做的,有时候人还是要执着点!

page 2

这里写图片描述
用颜色的区别告诉用户翻到头了(红绿灯,从小洗脑,Red=No)

理解就说这些,具体贴实现

包目录:
内容已经标注,之后就不做解释了
这里写图片描述

MtOnlineActivity

public class MtOnlineActivity extends FragmentActivity {
    /** * 作为页面容器的ViewPager */
    ViewPager mViewPager;

    /** * 页面集合 */
    List<Fragment> fragmentList;

    OneFragment oneFragment;
    TwoFragment twoFragment;

    //当前选中的项
    int currenttab=-1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(getLayout());

        findById();

        setListener();
    }


    private void findById() {
        showTitleBar(true);
        initTitleBar("Mt模仿页面");
        showBackBtn(true);

        mViewPager=(ViewPager) findViewById(R.id.viewpager);

        fragmentList=new ArrayList<Fragment>();

        oneFragment=new OneFragment();
        twoFragment=new TwoFragment();

        fragmentList.add(oneFragment);
        fragmentList.add(twoFragment);

        mViewPager.setAdapter(new MyFrageStatePagerAdapter(getSupportFragmentManager(), fragmentList, mViewPager, currenttab));
    }


    private void setListener() {

    }





    private int getLayout() {
        return R.layout.activity_mt;
    }

    private void showTitleBar(boolean show) {

        final RelativeLayout titleBarRY = (RelativeLayout)findViewById(R.id.titleLayout);
        if (show) {

            titleBarRY.setVisibility(View.VISIBLE);

        } else {

            titleBarRY.setVisibility(View.GONE);

        }

    }

    private void initTitleBar(String titleText) {

        final TextView tv_title = (TextView)findViewById(R.id.titleText);
        tv_title.setVisibility(View.VISIBLE);
        tv_title.setText(titleText);

    }

    private void showBackBtn(boolean show) {

        final ImageView btn_back = (ImageView) findViewById(R.id.btnBack);
        if (show) {

            btn_back.setVisibility(View.VISIBLE);
            btn_back.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
        } else {

            btn_back.setVisibility(View.INVISIBLE);

        }

    }

}

OneFragment

public class OneFragment extends Fragment{
    View view;
    GridView gridView;

    //生成动态数组,并且转入数据
    ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LogUtils.d("-----OneFragment--->onCreate");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        LogUtils.d("-----OneFragment--->onCreateView");
        view=inflater.inflate(R.layout.one, container, false);
        initView();
        return view;
    }

    private void initView(){

        gridView = (GridView)view. findViewById(R.id.gridView);

        for(int i=0;i<10;i++)
        {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("ItemImage", R.drawable.icon3);//添加图像资源的ID
            map.put("ItemText", "NO."+String.valueOf(i));//按序号做ItemText
            lstImageItem.add(map);
        }

        //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
        SimpleAdapter saImageItems = new SimpleAdapter(getContext(), //没什么解释
                lstImageItem,//数据来源
                R.layout.mt_item,//night_item的XML实现

                //动态数组与ImageItem对应的子项
                new String[] {"ItemImage","ItemText"},

                //ImageItem的XML文件里面的一个ImageView,两个TextView ID
                new int[] {R.id.ItemImage,R.id.ItemText});
        //添加并且显示
        gridView.setAdapter(saImageItems);
        //添加消息处理
        gridView.setOnItemClickListener(new ItemClickListener());

}
    class ItemClickListener implements AdapterView.OnItemClickListener {
        public void onItemClick(AdapterView<?> arg0,//The AdapterView where the click happened
                                View arg1,//The view within the AdapterView that was clicked
                                int arg2,//The position of the view in the adapter
                                long arg3//The row id of the item that was clicked
        ) {
            //在本例中arg2=arg3
            HashMap<String, Object> item = (HashMap<String, Object>) arg0.getItemAtPosition(arg2);
            //显示所选Item的ItemText
            Toast.makeText(getContext(),(String) item.get("ItemText"),Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        LogUtils.d("-----OneFragment--->onDestroyView");
    }


}

BaseActivity增加的功能

    protected void initTitleBar(String titleText) {

        final TextView tv_title = (TextView)findViewById(R.id.titleText);
        tv_title.setVisibility(View.VISIBLE);
        tv_title.setText(titleText);

    }

    protected void showTitleBar(boolean show) {

        final RelativeLayout titleBarRY = (RelativeLayout) findViewById(R.id.titleLayout);
        if (show) {

            titleBarRY.setVisibility(View.VISIBLE);

        } else {

            titleBarRY.setVisibility(View.GONE);

        }

    }

    protected void showBackBtn(boolean show) {

        final ImageView btn_back = (ImageView) findViewById(R.id.btnBack);
        if (show) {

            btn_back.setVisibility(View.VISIBLE);
            btn_back.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });

        } else {

            btn_back.setVisibility(View.INVISIBLE);

        }

    }

Mt的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/gridviewbg" tools:context="packageprojectdemo.wjj.com.packageprojectdemo.MtOnlineActivity">

    <LinearLayout  android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout">
        <include  android:id="@+id/titleLayout" layout="@layout/title_layout" />

        <RelativeLayout  android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:id="@+id/imageLayout">

            <TextView  android:layout_width="match_parent" android:layout_height="150dp" android:textAppearance="?android:attr/textAppearanceLarge" android:text="我填充了一大堆东西" android:id="@+id/textView" android:gravity="center" android:textColor="@color/white"/>
        </RelativeLayout>
    </LinearLayout>

        <android.support.v4.view.ViewPager  android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/linearLayout">

        </android.support.v4.view.ViewPager>


</RelativeLayout>

item的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip" android:layout_width="fill_parent">
    <ImageView  android:layout_height="wrap_content" android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_centerHorizontal="true">
    </ImageView>
    <TextView  android:layout_width="wrap_content" android:layout_below="@+id/ItemImage" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:id="@+id/ItemText" android:textColor="@color/white">
    </TextView>
</RelativeLayout>

具体大家可以源码,都有详细标注:http://yunpan.cn/cHgtpPe4d5xxg 访问密码 394c

超级大的字!!各位观众老爷,之后想学什么,了解什么都可以留言,我知道的我肯定会写,就算不知道的我也回去学学看的,有需求的请留言说明,谢谢哈!!

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/ddwhan0123/blog/507601

相关文章:

  • 前端性能优化(十)
  • 汇编语言HelloWorld
  • n个元素的入栈顺序有多少种出栈顺序?
  • 迅维网
  • PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
  • win7系统中任务计划程序的使用与查询
  • 报表性能优化方案之数据集缓存与共享
  • 站在OC的基础上快速理解Swift的类与结构体
  • Shell脚本编程小结
  • 解决因特网和xshell考虑到问题
  • Android之Handler的postDelayed()使用方法
  • iOS UI进阶-2.0 CALayer
  • 机器学习---学习首页
  • Javascript和OCX的结合历程
  • 解析微信开发之搜索歌曲
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【个人向】《HTTP图解》阅后小结
  • C++11: atomic 头文件
  • Java|序列化异常StreamCorruptedException的解决方法
  • Lsb图片隐写
  • mysql 5.6 原生Online DDL解析
  • spring security oauth2 password授权模式
  • Terraform入门 - 3. 变更基础设施
  • 初识 beanstalkd
  • 配置 PM2 实现代码自动发布
  • 事件委托的小应用
  • 数据可视化之 Sankey 桑基图的实现
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 怎样选择前端框架
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十) 初识 Docker file
  • (小白学Java)Java简介和基本配置
  • (一)基于IDEA的JAVA基础12
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET单元测试
  • .NET中winform传递参数至Url并获得返回值或文件
  • .net专家(张羿专栏)
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Android] Upload package to device fails #2720
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [codevs 1515]跳 【解题报告】
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [Fri 26 Jun 2015 ~ Thu 2 Jul 2015] Deep Learning in arxiv