安卓市场--框架搭建3

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/46963891 在我们的上一篇博客中,最基本的框架已经搭建完成了,那我们为什么这篇文章还叫做框架搭建呢?原因就是之前我们搭建的是贯穿这个项目,要对这个项目的声明周期进行管理的框架,而后面我们需要做的是搭建一个我们需要的与内容有关的框架。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/46963891

在我们的上一篇博客中,最基本的框架已经搭建完成了,那我们为什么这篇文章还叫做框架搭建呢?原因就是之前我们搭建的是贯穿这个项目,要对这个项目的声明周期进行管理的框架,而后面我们需要做的是搭建一个我们需要的与内容有关的框架。

下面我们先来看一下我们这个框架最终的效果:

首页

分类界面

个人主页

搜索

二维码扫描

侧滑栏

在这个框架中,我们需要做的有下面几个工作:

  • 1:添加一个TabHost,tab分别是首页,分类,排行,推荐和主题
  • 2:首页上方有一个用户按钮,搜索框和二维码扫描按钮
  • 3:添加侧滑栏
  • 4:点击各个按钮之后都能进入相应的界面

下面我们一个一个的来完成这些工作:

(一):添加TabHost

真心的说,TabHost很难用,所以在现在的android API中就不推荐使用TabHost了,但是,其实用起来还是比较简单的,所以这次我就使用了该API。

话不多说,我们开始:

(1):添加布局

1:我们需要在res/layout文件夹下新建一个新的xml文件,并命名为main_tab.xml,选择布局方式为TabHost

2:用过TabHost的同学可能很清楚,TabHost的使用方式很固定。

基本的方式就是根布局是TabHost,下面有一个布局管理器,一般为RelativeLayout,接着在布局管理器里面有一个FrameLayout用来存放相应的内容,最后是一个TabWidget,用来显示标签。

3:在这里有三个地方需要注意:

1:TabHost的id必须要这样设置
** android:id="@android:id/tabhost" **
2:中间的FrameLayout的id必要要设置为
** android:id="@android:tabcontent" **
3:最后的TabWidget的id必须设置为
** android:id="@android:id/tabs" **

下面来看一下整体的布局代码:


    <?xml version="1.0" encoding="utf-8"?>
    <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <!-- 需要一个布局管理器 -->

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >
            </FrameLayout>

            <!-- TabWidget必须标签,用来存放tab标签,且id必须为tabs -->

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:background="@color/mbarcolor"
                >
            </TabWidget>
        </RelativeLayout>

        </TabHost>

在其中出现了一个color属性,mbarcolor。在这里我们来回顾一下:

在android中有很多资源是可以定义在资源文件或者是样式文件中,来重复利用的,其中就包括颜色,下面我们来看一下如何定义自己的颜色资源。

1:在res/values文件夹下面会有一个color.xml。(如果没有可以自己新建一个)。
2:如果是新建的color.xml文件,则打开文件之后,需要添加xml根节点:
    <resource></resource>

3:如果想要添加自己的color资源,就需要在resource节点下面添加color节点

下面来看一下我们mbarcolor颜色的定义:
    <color name="mbarcolor">#29abe2</color>

4:调用的时候,就可以使用名字调用了。

布局文件建立好了,我们在我们的效果图上看到了,还需要为我们的TabWidget建立Holder。

我们的Holder是上面一个ImageView,下面一个TextView。

1:在res/layout文件夹下面新建tab_layout.xml文件
2:添加代码

```
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/tab_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dp" />

    <TextView
        android:id="@+id/tab_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white" />

</LinearLayout>

```

好,TabHost的布局文件建立好了,我们现在来使用该布局文件。

1:在我们的src/com.sdu.activities包中新建MarketTab.java文件。

2:获取相应的控件以及建立资源文件


    private TabHost tabHost;

        // 资源文件
        private Class activitys[] = { HomeActivity.class, SortActivity.class,
                HotActivity.class, RecommandActivity.class, ThemeActivity.class };// 跳转的Activity

        private String title[] = { "首页", "分类", "排行", "推荐", "主题" };// 设置菜单的标题

        private int image[] = { R.drawable.tab_home, R.drawable.tab_sort,
                R.drawable.tab_hot, R.drawable.tab_rec, R.drawable.tab_sort };// 设置菜单

2:新建initTab函数,进行初始化操作


    private void initTab() {
        Resources resources = getResources();

        tabHost = (TabHost) findViewById(android.R.id.tabhost);
        tabHost.setup(this.getLocalActivityManager());

        // 创建标签
        for (int i = 0; i < activitys.length; i++) {
            // 实例化一个view作为tab标签的布局
            View view = View.inflate(this, R.layout.tab_layout, null);

            // 设置imageview
            ImageView imageView = (ImageView) view.findViewById(R.id.tab_image);

            imageView.setBackgroundResource(image[i]);

            // 设置textview
            TextView textView = (TextView) view.findViewById(R.id.tab_title);
            textView.setText(title[i]);
            // 设置跳转activity
            Intent intent = new Intent(this, activitys[i]);

            // 载入view对象并设置跳转的activity
            TabSpec spec = tabHost.newTabSpec(title[i]).setIndicator(view)
                    .setContent(intent);

            // 添加到选项卡
            tabHost.addTab(spec);
        }

        // tabHost.setCurrentTabByTag("music");设置第一次打开时默认显示的标签,该参数与tabHost.newTabSpec("music")的参数相同
        tabHost.setCurrentTab(0);// 设置第一次打开时默认显示的标签,参数代表其添加到标签中的顺序,位置是从0开始的
    }

好了,到时候看一下我们这个类的整体的代码了。


    package com.sdu.activities;

    import com.sdu.androidmarket.R;

    import android.app.TabActivity;
    import android.content.Intent;
    import android.content.res.Resources;
    import android.content.res.Resources.Theme;
    import android.os.Bundle;
    import android.view.View;
    import android.view.Window;
    import android.widget.ImageView;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
    import android.widget.TextView;

    public class MarketTab extends TabActivity {

        private TabHost tabHost;

        // 资源文件
        private Class activitys[] = { HomeActivity.class, SortActivity.class,
                HotActivity.class, RecommandActivity.class, ThemeActivity.class };// 跳转的Activity

        private String title[] = { "首页", "分类", "排行", "推荐", "主题" };// 设置菜单的标题

        private int image[] = { R.drawable.tab_home, R.drawable.tab_sort,
                R.drawable.tab_hot, R.drawable.tab_rec, R.drawable.tab_sort };// 设置菜单

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            requestWindowFeature(Window.FEATURE_NO_TITLE);

            setContentView(R.layout.main_tab);

            initTab();
        }

        private void initTab() {
            Resources resources = getResources();

            tabHost = (TabHost) findViewById(android.R.id.tabhost);
            tabHost.setup(this.getLocalActivityManager());

            // 创建标签
            for (int i = 0; i < activitys.length; i++) {
                // 实例化一个view作为tab标签的布局
                View view = View.inflate(this, R.layout.tab_layout, null);

                // 设置imageview
                ImageView imageView = (ImageView) view.findViewById(R.id.tab_image);

                imageView.setBackgroundResource(image[i]);

                // 设置textview
                TextView textView = (TextView) view.findViewById(R.id.tab_title);
                textView.setText(title[i]);
                // 设置跳转activity
                Intent intent = new Intent(this, activitys[i]);

                // 载入view对象并设置跳转的activity
                TabSpec spec = tabHost.newTabSpec(title[i]).setIndicator(view)
                        .setContent(intent);

                // 添加到选项卡
                tabHost.addTab(spec);
            }

            // tabHost.setCurrentTabByTag("music");设置第一次打开时默认显示的标签,该参数与tabHost.newTabSpec("music")的参数相同
            tabHost.setCurrentTab(0);// 设置第一次打开时默认显示的标签,参数代表其添加到标签中的顺序,位置是从0开始的
        }

    }

文章来源

目录
相关文章
|
3月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
4月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台框架解析
在移动应用开发的广阔舞台上,安卓和iOS一直是两大主角。随着技术的进步,开发者们渴望能有一种方式,让他们的应用能同时在这两大平台上运行,而不必为每一个平台单独编写代码。这就是跨平台框架诞生的背景。本文将探讨几种流行的跨平台框架,包括它们的优势、局限性,以及如何根据项目需求选择合适的框架。我们将从技术的深度和广度两个维度,对这些框架进行比较分析,旨在为开发者提供一个清晰的指南,帮助他们在安卓和iOS的开发旅程中,做出明智的选择。
|
5天前
|
算法 JavaScript Android开发
|
14天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
60 1
|
2月前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
316 3
|
2月前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
75 8
|
3月前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
如何使用Amlogic T972安卓9.0系统上的misc框架来简化驱动程序开发,通过misc框架自动分配设备号并创建设备文件,从而减少代码量并避免设备号冲突。
38 0
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
|
3月前
|
存储 前端开发 Java
Android MVVM框架详解与应用
在Android开发中,随着应用复杂度的增加,如何有效地组织和管理代码成为了一个重要的问题。MVVM(Model-View-ViewModel)架构模式因其清晰的结构和高效的开发效率,逐渐成为Android开发者们青睐的架构模式之一。本文将详细介绍Android MVVM框架的基本概念、优势、实现流程以及一个实际案例。
|
4月前
|
前端开发 安全 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
【7月更文挑战第28天】在Android开发领域,五大框架如星辰般指引方向,加速进程,提升应用品质。1. **Retrofit**:Square公司的类型安全HTTP客户端,使网络请求变得优雅简洁。2. **Room**:Google推荐的ORM库,简化SQLite数据库访问。3. **MVVM**:一种架构模式,提高代码可维护性和扩展性。4. **Dagger 2**:依赖注入框架,减少样板代码,以声明方式管理依赖。5. **Jetpack Compose**:全新的UI工具包,采用声明式UI编程,让UI开发更直观高效。掌握这些框架,能有效应对Android开发挑战,助力打造爆款应用。
247 0