[仿南航app开发日记2]主界面完成

效果

先来看看主界面完成的效果:
这里写图片描述
这是主界面的样子,如果要参照原app是什么样子的可以参照我的上一篇博客:

http://blog.csdn.net/supervictim/article/details/53856827

我感觉是很相像的,下面就按照我开发的顺序来介绍吧:
1. 我先写的是中间的那8个菜单的布局,这里面的布局没什么意思就是用代码堆出来的布局:

 <GridLayout
        android:id="@+id/myGrid"
        android:layout_width="match_parent"
        android:background="@android:color/white"
        android:columnCount="4"
        android:rowCount="2"
        android:padding="20dp"
        android:layout_height="175dp">
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_culture">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp1_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_hand">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp2_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_forum">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp3_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_transaction">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="10dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp4_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_wifi">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp5_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_mobile_office">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp6_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_card">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp7_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_service">
            </TextView>
        </LinearLayout>


    </GridLayout>

这8个菜单我是用了一个GridLayout来写的,大家可以仔细看看,没什么意思,就是堆出来的布局。
2. 写完中间的菜单布局就是下面的新闻列表布局了,xml文件比较简单,就是一个ListView,然后就是参考原先app的布局,里面有图片、标题、时间、阅读数,这些数据是来自服务器的,所以我给它写了一个model

package cn.karent.nanhang.model;

/**
 * Created by wan on 2016/12/24.
 * 新闻的model
 */
public class News {

    /**
     * 图片地址
     */
    private String picUrl;
    /**
     * 标题
     */
    private String title;
    /**
     * 时间
     */
    private String time;
    /**
     * 阅读次数
     */
    private String count;

    public String getPicUrl() {
        return picUrl;
    }

    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getCount() {
        return count;
    }

    public void setCount(String count) {
        this.count = count;
    }
}

众所周知,要使用ListView需要一个Adapter,我就自定义了一个Adapter,代码如下:

package cn.karent.nanhang.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import cn.karent.nanhang.model.News;
import cn.karent.nanhang.R;

/**
 * Created by wan on 2016/12/24.
 * 新闻列表的Adapter
 */
public class NewsAdapter extends ArrayAdapter<News> {
    /**
     * 保存的是layout的id,例如R.layout.news_item_layout
     */
    private int mResourceId;

    private Context mContext;

    public NewsAdapter(Context context, int resourceId) {
        super(context, resourceId);
        mResourceId = resourceId;
        mContext = context;
    }

    /**
     * 加载每一项的布局
     * @param position     列表的位置
     * @param convertView 移除屏幕外回收的convertView
     * @param parent       这里是ListView
     * @return             ListView里面的列表项
     */
    public View getView(int position, View convertView, ViewGroup parent) {
        News n = getItem(position);
        Hold h;
        if( convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(mResourceId, null);
            h = new Hold();
            h.pic = (ImageView) convertView.findViewById(R.id.news_item_pic);
            h.title = (TextView)convertView.findViewById(R.id.news_item_title);
            h.time = (TextView)convertView.findViewById(R.id.news_item_time);
            h.count = (TextView)convertView.findViewById(R.id.news_item_count);
            convertView.setTag(h);
        } else {
            h = (Hold)convertView.getTag();
        }
        h.getCount().setText(n.getCount());
        h.getTime().setText(n.getTime());
        h.getTitle().setText(n.getTitle());
        return convertView;
    }

    class Hold {

        private ImageView pic;

        private TextView title;

        private TextView time;

        private TextView count;

        public ImageView getPic() {
            return pic;
        }

        public void setPic(ImageView pic) {
            this.pic = pic;
        }

        public TextView getTitle() {
            return title;
        }

        public void setTitle(TextView title) {
            this.title = title;
        }

        public TextView getTime() {
            return time;
        }

        public void setTime(TextView time) {
            this.time = time;
        }

        public TextView getCount() {
            return count;
        }

        public void setCount(TextView count) {
            this.count = count;
        }
    }

}

这个也没什么好讲的,跟普通的没什么区别,我们来看看每个Item的布局是什么:

<?xml version="1.0" encoding="utf-8"?>
<!--显示新闻列表内容-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="wrap_content"
    android:background="@color/newsItemColor"
    android:layout_height="wrap_content">
    <!--显示新闻图片-->
    <ImageView
        android:id="@+id/news_item_pic"
        android:layout_width="75px"
        android:layout_height="60dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:scaleType="fitCenter"
        android:src="@drawable/new_dealfult"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="20dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:orientation="vertical">
        <!--标题-->
        <TextView
            android:id="@+id/news_item_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:textSize="14sp"
            android:text="12月26日华东理工大学黎野平教授来校讲学"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <!--日期-->
            <TextView
                android:id="@+id/news_item_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="12sp"
                android:text="2016/12/23/ 15:21:03"/>
            <!--占位-->
            <View android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"/>
            <!--阅读次数-->
            <TextView
                android:id="@+id/news_item_count"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="12sp"
                android:text="阅读次数:322"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

这个也没什么好讲的,也是堆出来的布局
3. 下面来介绍一下最顶部的ActionBar,我这里使用了ActionBar,对于默认的ActionBar,我要加一个右上角的用户头像,关于左上角的文字直接调用Activity的setTitle()就可以更改了,先加右上角的头像,创建一个menu的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/userhead"
        android:icon="@drawable/userhead_dealfut"
        android:title="@string/userhead"
        app:showAsAction="always"/>
</menu>

然后重写Activity的一个回调函数:

  public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

这样就能创建右上角的用户头像,但是要更改ActionBar的颜色和高度就只能设置设置style了,我们看看androidManifest.xml文件里面的代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.karent.nanhang">

    <application
        android:allowBackup="true"
        android:name=".util.MyApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

标签里面的android:style=”@style/AppTheme”,这个是自定义的style:

  <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/actionBarColor</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:actionBarSize">49dp</item>
    </style>

其中<item name="android:actionBarSize">49dp</item> 这个是设置ActionBar的高度的,<item name="colorPrimary">@color/actionBarColor</item> 这个是设置ActionBar的背景颜色的,下面附上我里面用到的strings.xml和colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="tabColor">#344e60</color>
    <color name="actionBarColor">#0077bb</color>
    <color name="newsItemColor">#f6f5f5</color>
</resources>

<resources>
    <string name="app_name">nanhang</string>
    <string name="tab_home">我的资料</string>
    <string name="tab_doctor">我的课表</string>
    <string name="tab_project">我的通知</string>
    <string name="tab_person">扫一扫</string>
    <string name="college_culture">校园文化</string>
    <string name="college_hand">掌上校园</string>
    <string name="college_forum">校园论坛</string>
    <string name="college_transaction">校园事务</string>
    <string name="college_wifi">一键上网</string>
    <string name="college_mobile_office">移动办公</string>
    <string name="college_card">一卡通</string>
    <string name="college_service">校园服务</string>
    <string name="userhead">头像</string>
</resources>

上面就是改变ActionBar的风格。
3. 创建显示广告的banner,这里我自定义了布局继承自ViewGroup:

package cn.karent.nanhang.UI;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Scroller;
import cn.karent.nanhang.util.ScreenUtil;

/**
 * Created by wan on 2016/12/24.
 * 首页图片轮播图,banner
 */
public class ImageTurnLayout extends ViewGroup {

    private Context mContext;

    private Scroller mScroller;
    /**
     * 当前的View的宽度
     */
    private int mWidth;
    /**
     * 上次手指一动的坐标
     */
    private float mOldX;
    /**
     * 右边界
     */
    private int mRightEdge;

    /**
     * 指示当前到了哪个Child
     */
    private int mIndicator;
    //画笔
    private Paint mPaint;
    //小圆点的半径
    private float mRadius;
    /**
     * 两个指示器之间的空白(小圆点)
     */
    private float mBlank;
    /**
     * 坐标的空白
     */
    private float mLeftBlank;
    /**
     * 小圆点的y坐标(因为y坐标都是一样的,不需要重复计算)
     */
    private int mIndicatorY;

    public ImageTurnLayout(Context context) {
        super(context);
    }

    public ImageTurnLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        mScroller = new Scroller(context);
        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.WHITE);
        mRadius = ScreenUtil.dp2px(5);
        mBlank = 2 * mRadius;
        mIndicatorY = ScreenUtil.dp2px(135);
        //不设置这个将不会调用diaw方法
        setWillNotDraw(false);
    }

    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = MeasureSpec.getSize(widthMeasureSpec);
        mWidth = width;
        int height = MeasureSpec.getSize(heightMeasureSpec);
        int indicatorTotal = 0;
        //测量每一个子项应该都是充满屏幕的
        for( int i = 0; i < getChildCount(); i++) {
            int widthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
            int heightSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
            View child = getChildAt(i);
            child.measure(widthSpec, heightSpec);
            indicatorTotal += mRadius;
            indicatorTotal += mBlank;
        }
        indicatorTotal -= mBlank;
        mLeftBlank = (width - indicatorTotal) / 2 + 0.5f;
        //保存右边界
        mRightEdge = getChildAt(getChildCount() - 1).getLeft();

    }

    public void onLayout(boolean changed, int l, int t, int r, int b) {
        //布局
        for(int i = 0; i < getChildCount(); i++) {
            View child = getChildAt(i);
            child.layout(i * child.getMeasuredWidth(), 0,  (i + 1) * child.getMeasuredWidth(), child.getMeasuredHeight());
        }
    }

    public void draw(Canvas c) {
        super.draw(c);
        drawIndicator(c);
    }


    /**
     * 绘制指示器
     * @param canvas
     */
    private void drawIndicator(Canvas canvas) {
        for(int i = 0; i < getChildCount(); i++) {
            //代表当前显示的哪个页面
            if( i == mIndicator) {
                mPaint.setColor(Color.BLUE);
            } else {
                mPaint.setColor(Color.WHITE);
            }
            canvas.drawCircle(getScrollX() + mLeftBlank + i * (mRadius + mBlank),  mIndicatorY, mRadius, mPaint);
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
//        return super.onInterceptTouchEvent(ev);
        return true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        switch( action ) {
            case MotionEvent.ACTION_DOWN:
                mOldX = event.getX();
                return true;
            case MotionEvent.ACTION_MOVE:
                float x = event.getX();
                int moveX = (int)(mOldX - x);
                //滚动
                if( getScrollX() + moveX >= mRightEdge ) {
                    scrollTo(mRightEdge, 0);
                } else if( getScrollX() + moveX <= 0) {
                    scrollTo(0, 0);
                } else {
                    scrollBy(moveX, 0);
                }
                //计算指示器的位置
                mIndicator = getScrollX() / mWidth;
                break;
            case MotionEvent.ACTION_UP:
                //手指释放,计算该到哪张
                int next = (int)(getScrollX() * 1.0f  / mWidth + 0.5f);
                int dx = mWidth * next - getScrollX();
                mScroller.startScroll(getScrollX(), 0, dx, 0);
                break;
            default:
                break;
        }
        invalidate();
        return super.onTouchEvent(event);
    }

    @Override
    public void computeScroll() {
        if( mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            mIndicator = getScrollX() / mWidth;
            invalidate();
        }
    }
}

下面简单的介绍一下这个banner的思路吧,先布局好所有的child,每个child都充满整个屏幕,然后拦截touch事件,根据手指滑动的距离调用scrollBy()来滚动,当手指停下的时候计算下个要到达第几个child的意图,根据Scroller和回调函数computeScroll()函数来完成接下来的滚动,这个只是child的滚动,我们看到下面还有四个小圆点,这个我叫做指示器,指示当前到了那个图片,因为它不要响应事件,完全可以画出来,所以我重写了ViewGroup的draw()方法(注意,android布局三步走,measure()、layout()、draw()前面两个方法是final的,代表不能重写,draw()方法不是final的,可以重写,但是一定要调用父类的draw()方法,否则child将不可见),在super.draw()之后绘制指示器,计算坐标。注意:重绘的时候需要调用下面这个方法,否则将失效:

setWillNotDraw(false);

具体的可以参考一下这篇博客:

http://blog.csdn.net/leehong2005/article/details/7299471

下面放上完整的代码:

package cn.karent.nanhang;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import cn.karent.nanhang.UI.NewsUI;

public class MainActivity extends AppCompatActivity {
    /**
     * 封装跟新闻有关的UI
     */
    private NewsUI mNewsUI;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_layout);
        //设置titile
        setTitle("请登录...");
        mNewsUI = new NewsUI(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    /**
     * ActionBar上面的按钮选中回调
     * @param item 菜单项
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch( id ) {
            case R.id.userhead:
Log.d("onOptionSelected", "菜单回调");
                setTitle("南昌航空大学");
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }


}

上面有一个NewsUI,我将关于新闻的操作的全部提取到这个NewsUI类里面了:

package cn.karent.nanhang.UI;

import android.app.Activity;
import android.widget.ListView;
import cn.karent.nanhang.R;
import cn.karent.nanhang.adapter.NewsAdapter;
import cn.karent.nanhang.model.News;

/**
 * Created by wan on 2016/12/24.
 * 将新闻列表的常用操作封装在这里
 */
public class NewsUI {

    private Activity mActivity;

    private ListView mListView;

    private NewsAdapter mNewsAdapter;

    public NewsUI(Activity activity) {
        mActivity = activity;
        mListView = (ListView)activity.findViewById(R.id.news_list);
        mNewsAdapter = new NewsAdapter(activity, R.layout.news_item_layout);
        mListView.setAdapter(mNewsAdapter);
        fillContent();
    }

    /**
     * 给ListView填充新闻
     */
    public void fillContent() {
        News  n = new News();
        n.setCount("阅读次数:322");
        n.setTitle("12月26日华东理工大学黎野平教授来校讲学");
        n.setTime("2016/12/23/ 15:21:03");
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
        mNewsAdapter.add(n);
    }





}

整个主界面的布局:

<?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">
    <!--显示banner-->
   <cn.karent.nanhang.UI.ImageTurnLayout
       android:layout_width="match_parent"
       android:layout_height="150dp">
       <ImageView
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY"
           android:src="@drawable/banner"/>
       <ImageView
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY"
           android:src="@drawable/banner"/>
       <ImageView
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY"
           android:src="@drawable/banner"/>
       <ImageView
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:scaleType="fitXY"
           android:src="@drawable/banner"/>

   </cn.karent.nanhang.UI.ImageTurnLayout>
    <!--显示功能-->
    <GridLayout
        android:id="@+id/myGrid"
        android:layout_width="match_parent"
        android:background="@android:color/white"
        android:columnCount="4"
        android:rowCount="2"
        android:padding="20dp"
        android:layout_height="175dp">
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_culture">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp1_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_hand">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp2_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_forum">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp3_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_transaction">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="10dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp4_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_wifi">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp5_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_mobile_office">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp6_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_card">

            </TextView>
        </LinearLayout>
        <LinearLayout
            android:gravity="center"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="6dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:src="@drawable/btn_tab_temp7_off"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:text="@string/college_service">
            </TextView>
        </LinearLayout>


    </GridLayout>

    <!--显示新闻-->
    <ListView
        android:id="@+id/news_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

    </ListView>
    <!--底部菜单栏-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:clipChildren="false"
        android:background="@android:color/white"
        android:layout_height="70dp">
        <LinearLayout
            android:layout_alignParentBottom="true"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:gravity="center"
            android:background="@color/tabColor"
            android:orientation="horizontal">
            <!--我的资料-->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="25dp"
                    android:src="@drawable/pic_tab_home"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@android:color/white"
                    android:text="@string/tab_home"/>
            </LinearLayout>
            <!--我的课表-->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="25dp"
                    android:src="@drawable/pic_tab_doctor"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/tab_doctor"
                    android:textColor="@android:color/white"/>
            </LinearLayout>
            <!--中间小加号-->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:layout_gravity="bottom"
                android:layout_marginTop="-15dp"
                android:paddingTop="5dp"
                android:background="@drawable/home_shape"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="57dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/home_on"/>

            </LinearLayout>
            <!--我的通知-->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="25dp"
                    android:src="@drawable/pic_tab_project"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/tab_project"
                    android:textColor="@android:color/white"/>
            </LinearLayout>
            <!--扫一扫-->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="25dp"
                    android:src="@drawable/pic_tab_personal"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/tab_person"
                    android:textColor="@android:color/white"/>
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

补充一点代码,上面的代码里面使用了ScreenUtil类,这个类的代码如下:

package cn.karent.nanhang.util;

import android.util.DisplayMetrics;

/**
 * Created by wan on 2016/12/17.
 */
public class ScreenUtil {

    /**
     * 获取屏幕的密度
     * @return
     */
    public static float getDensity() {
        DisplayMetrics dm = MyApplication.getContext().getResources().getDisplayMetrics();
        float density = dm.density;
//        Log.d("density", density + "");
        return density;
    }

    public static DisplayMetrics getDislayMetrics() {
        return MyApplication.getContext().getResources().getDisplayMetrics();
    }

    public static int px2dp(float p) {
        float density = getDensity();
        return (int)(p / density + 0.5f);
    }

    public static int dp2px(float dip) {
        return (int)(dip * getDensity() + 0.5f);
    }

    /**
     * 获取屏幕宽度
     * @return
     */
    public static int getScreenWidth() {
        return getDislayMetrics().widthPixels;
    }

    public static int getScreenHeight() {
        return getDislayMetrics().heightPixels;
    }


}

MyApplication.java:

package cn.karent.nanhang.util;

import android.app.Application;
import android.content.Context;

/**
 * Created by wan on 2016/12/17.
 * 获取全局Context
 */
public class MyApplication extends Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

}

要想我们自己的Application生效,需要配置一下AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.karent.nanhang">

    <application
        android:allowBackup="true"
        android:name=".util.MyApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>

</manifest>
android:name=".util.MyApplication"

添加上面的那一行系统就不会自己创建Application,而是会使用我们创建的Application

好了,完整的代码就是上面我所说的了,希望大家圣诞夜过的愉快!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值