美文网首页
《Android编程权威指南》之使用布局与部件创建用户界面

《Android编程权威指南》之使用布局与部件创建用户界面

作者: 夜远曦白 | 来源:发表于2021-08-29 23:55 被阅读0次

    好啦,本章将会优化 CriminalIntent 项目的布局,并将学习一个新的很好用的工具,叫 ConstraintLayout。加油!🆙

    初识 ConstraintLayout 布局

    它被叫做约束布局,是 Android Jetpack 中的一部分,它可使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局,而且它的功能支持直接通过布局编辑器的可视化工具进行拖拽使用。

    官方介绍 ConstraintLayout 布局地址:
    https://developer.android.google.cn/training/constraint-layout?hl=zh-cn

    图形布局编辑器

    接下来尝试使用 ConstraintLayout 布局吧,打开 item_crime.xml,右边切换到 Design,将 LinearLayout Convert to ConstraintLayout 看看。

    demo

    然后一些小图标操作,自行熟悉一下。

    使用ConstraintLayout

    可以拖拽,可以手写。可能会出现点问题,多试几次。

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp">
    
        <TextView
            android:id="@+id/tv_item_crime_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Crime Title"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <TextView
            android:id="@+id/tv_item_crime_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="Crime Date"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/tv_item_crime_title" />
    
        <ImageView
            android:id="@+id/img_item_crime_isSolved"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_solved"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    然后将手铐的小图标加上逻辑代码,具体实现参考结尾处 Github 地址喔。

    深入学习布局属性

    Android 每个控件都默认引用 Android 自带样式文件的 style 属性。该预定义样式来自应用的主题,主题也是一种样式资源。Android 自带了一些供应用使用的平台主题,应用默认主题是在 manifest 文件的 application 标签下引用的。

    后面会有个章节专门讲主题,稍等等等...

    深入学习:边距与内边距

    • 边距(margin):布局参数,决定了控件间的距离

    • 内边距(padding):非布局参数,它的设置是在告诉控件绘制自己本身时,要比所含内容大多少。

    深入学习:ConstraintLayout 的发展动态

    挑战练习:日期格式化

    这里写了个日期格式化的工具类,调用一下,就完成了挑战练习要求啦,格式有点小小不一样,问题不大,目的是为了学习使用 DateFormat 类。

    object DateUtil {
    
        /**
         * 自定义返回日期 星期,格式是 「2021年8月20日 周五」
         * Get day and week
         * @return 8月20日 周五
         */
        fun getDayAndWeek(date: Date): String {
    
            val simpleDateFormat = SimpleDateFormat("yyyy年MM月dd日")
            val dateStr: String = simpleDateFormat.format(date)
    
            val dayAndWeek = StringBuilder()
            dayAndWeek.append(dateStr)
            dayAndWeek.append("   ")
            dayAndWeek.append(getWeek_ChinaName(date))
            return dayAndWeek.toString()
        }
    
        /**
         * Get week_china name
         * 获取今天是星期几
         * @return 星期(几)
         */
        fun getWeek_ChinaName(date: Date): String {
            val list = arrayOf("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
            val calendar: Calendar = Calendar.getInstance()
            calendar.time = date
            var index: Int = calendar.get(Calendar.DAY_OF_WEEK) - 1
            if (index < 0) {
                index = 0
            }
            return list[index]
        }
    }
    

    效果:

    demo

    其他

    CriminalIntent 项目 Demo 地址:
    https://github.com/visiongem/AndroidGuideApp/tree/master/CriminalIntent

    相关文章

      网友评论

          本文标题:《Android编程权威指南》之使用布局与部件创建用户界面

          本文链接:https://www.haomeiwen.com/subject/gmfwiltx.html