安卓项目——实时记录APP:02搭建布局

编程项目2019/11/17 13:02:50阅读:783

项目的分析过程在上一篇文章:带你做项目——实时记录APP:01项目分析已经分析好了,那么本编文章就来具体上手做实时记录APP的小项目。

新建项目

首先打开eclipse,新建一个安卓项目。点击file——》new——》Android Application Project,然后输入项目的一些参数,参照下图


最小SDK(软件开发工具包)选择4.0及以上的,因为4.0以下的安卓版本几乎没人用了,而且选择4.0以下的会增加一个附属项目,会报错。目标SDK选择最大就行了。编译选择一个相对成熟的6.0版本。主题选择none,空主题。以后大部分项目都这样选择。
接着一直按下一步、直到finish,完成项目创建。然后你的项目列表中应该是下图这样的。

项目列表

界面搭建

接着我们开始搭建程序界面,根据程序分析,我们知道整个程序只需要三个看得见的元素,一个是按钮,一个是对话框,还有一个是一行行显示内容的列表。对话框是程序中生成的,所以目前只需要按钮和列表即可。列表当然是用listview控件了,当有很多一行行重复元素的时候,首先想到的就应该是listview。
我们打开activity布局文件,可以看到已经有了相对布局,就用相对布局,这样底部按钮会浮在listview上。

还要做一些修改,把相对布局的padding全部删掉,因为这样看起来更舒服些。变成了这样:

去掉padding

我们把里面的TextView删掉,然后写一个button。

<Button

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

        android:text="+"

       android:onClick="btn_click"

       android:layout_alignParentBottom="true"

        android:layout_centerHorizontal="true" />

这样就有一个位于底部的button了。给button加上onclick事件,后面会用到它的点击事件。预览一下:

底部的button

接着我们在button上面写一个listview,这样button就能浮在listview上方了。

<ListView

        android:id="@+id/lv"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        ></ListView>

预览一下:

预览listview
大概实现我们想要的样子了,上面的黑色标题看起来很丑,去掉它,还要把状态栏改成沉浸式的状态栏。这样状态栏颜色就和程序颜色一样了。

无标题、沉浸式状态栏

首先去掉标题,在MainActivity中加上一句代码即可。 
requestWindowFeature(Window.FEATURE_NO_TITLE);//要放在setContentView之前
然后为了好看一点,给相对布局加个背景色,android:background="#dff"
看一下效果:

去除标题的activity

接着修改导航条,需要变成沉浸式导航栏才好看,这里没有自己写,用到了网上找的一个方法。该方法接收一个activity对象,原理是设置全屏,设置状态栏透明显示,这样状态栏显示的颜色就是布局的颜色了。不过这样内容会跑到状态栏中,后面有内容的时候要在activity中或者listview中写一个paddingTop把内容挤下来。

/**

     * 通过设置全屏,设置状态栏透明

     *

     * @param activity

     */

    @SuppressLint("NewApi") privatevoid fullScreen(Activity activity) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

                //5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色

                Window window = activity.getWindow();

                View decorView =window.getDecorView();

                //两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间

                int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

               decorView.setSystemUiVisibility(option);

               window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

                window.setStatusBarColor(Color.TRANSPARENT);

                //导航栏颜色也可以正常设置

//                   window.setNavigationBarColor(Color.TRANSPARENT);

            } else {

                Window window = activity.getWindow();

                WindowManager.LayoutParamsattributes = window.getAttributes();

                int flagTranslucentStatus =WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;

                int flagTranslucentNavigation =WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;

                attributes.flags |=flagTranslucentStatus;

//                    attributes.flags |=flagTranslucentNavigation;

               window.setAttributes(attributes);

            }

        }

}

MainActivity中添加这个方法并调用。

看下效果:

沉浸式导航栏

状态栏颜色和布局颜色一样了。右上角看不清,仔细看,确实是有状态栏的。

listview视图设计、填充

界面搭建好之后,接着要向listview中填充数据了。根据我们的需求分析,每一行的右边要显示时间,左边要显示内容。我们要单独做一个布局文件来填充listview。
新建布局文件:listview_view.xml

然后写两个左右分布的TextView即可。TextView先写一些文字测试

listview_view.xml

<?xml version="1.0"encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    <TextView

       android:id="@+id/content"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:textSize="18sp"

        android:text="就算再高的山峰,也被云朵儿淹没。。。。。。。。。。。"

       android:layout_alignParentLeft="true"

       android:fontFamily="微软雅黑"

       android:paddingLeft="10dp"

       android:singleLine="true"

        />

    <TextView

        android:id="@+id/date"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:textSize="14sp"

       android:text="2018-10-07"

       android:textColor="#f66"

       android:fontFamily="微软雅黑"

       android:layout_alignParentRight="true"

       android:layout_alignParentBottom="true"

       android:paddingRight="10dp"

       />

</RelativeLayout>

然后在MainActivity中写代码填充listview。

protectedvoid onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);

        fullScreen(this);//沉浸式状态栏

        ListView lv =  (ListView)findViewById(R.id.lv);//获得listview

        lv.setAdapter(new MyAdapter());//设置数据适配器通过内部类继承baseAdapter

       

    }

    class MyAdapter extends BaseAdapter{

 

       @Override

       publicint getCount() {

           // TODO Auto-generatedmethod stub

           return 100;

       }

 

       @Override

       public Object getItem(int position) {

           // TODO Auto-generatedmethod stub

           returnnull;

       }

 

       @Override

       publiclong getItemId(int position) {

           // TODO Auto-generatedmethod stub

           return 0;

       }

 

       @Override

       public View getView(int position, View convertView, ViewGroupparent) {

           // TODO Auto-generatedmethod stub

           if(convertView == null){//这样写可以提高listview加载速度

              convertView = View.inflate(MainActivity.this, R.layout.listview_view, null);

           }

           return convertView;

       }

    }

运行效果如下:

运行效果

目前为止界面的搭建就已经完成了,下面就开始进行业务逻辑的实现了。因篇幅原因,请到下一篇文章查看。



本文系网站原创,转载请注明文章链接地址