AS从入门到精通-笔记(二)(关于按钮一直遵循主题色不能变换颜色)
昨晚搜了一整晚的博客,没找到适合我的AS体质的解决方案。有的说的是改主题,但怎么改都没用,最多是改变了下主题的默认颜色,但是按钮背景色还是遵循主题色;有的说改主题色,比如colorPrimary,colorSecondary之类的,但这还是不能让我自定义button颜色;还有的说用android:backgroundTint,但这个带Tint的好像是跟矢量资源相关的。
今早在YouTube上搜,有不少视频资源的,居然很快找到了解决方案,这个video也是最近发布的。
具体解决方案就是其他跟主题相关的都不用改,把activity_main.xml
中的Button
改成androidx.appcompat.widget.AppCompatButton
就行。
就像这样:
1 | <androidx.appcompat.widget.AppCompatButton |
💡注:按钮自定义样式style="@style/CustomButtonStyle"
的介绍在下面。
然后就是关于按钮自定义样式了,打算记一下笔记。
如上,这里style="@style/CustomButtonStyle"
的CustomButtonStyle
需要定义一下。
可以在themes.xml
中添加自定义的样式,也可以自己在values
文件夹下添加一个styles.xml
,如图:
然后写上如下代码:
1 |
|
对应的,我们需要在@drawable
文件夹下创一个selector
标签的文件,取名为button_selector
,代码:
1 | <selector xmlns:android="http://schemas.android.com/apk/res/android"> |
意思是按钮按下前是@drawable/light_gray_bg
样式,按下后是@drawable/dark_gray_bg
样式,然后我们分别写@drawable
文件夹下的light_gray_bg
和dark_gray_bg
文件。light_gray_bg
文件代码:
1 | <shape xmlns:android="http://schemas.android.com/apk/res/android" |
dark_gray_bg
文件代码:
1 | <shape xmlns:android="http://schemas.android.com/apk/res/android" |
💡注:这里的@color/*
的介绍在下面。
在values文件夹下创建colors.xml
,若以有请忽略(忘了新建项目时它是否自带了)。
写上形如下的代码:
1 |
|
在drawable
文件夹下放图片,然后引用的时候只写文件名,不要带扩展名。
代码如下:
1 | <ImageView |
这里有个关于文字可能被图片遮盖而无法显示的问题!
具体来说,后面声明的视图会叠放在前面声明的视图上方。这意味着如果两个视图有重叠部分,后面声明的视图会覆盖在前面声明的视图之上。
比如以下代码:
1 | <ImageView |
后声明的TextView会叠放在ImageView上方,也就是说文字显示在图片上放,不会被图片遮盖。
室友是直接创建两个文件,一个.xml,一个.java,但是这样是不会被识别成activity的,只会被识别成一个普通的.xml文件。
然后new了一个activity,AS给自动生成.xml和.java文件后,把原先的代码粘贴进去,就可以完美运作了。
因此创建activity还是需要用new。
module
首先一个application可以new多个module(这个老师上课就一直在强调)。老师第一节实验课就说了,可以用new module的方法,这样我们之后需要多做几个app的时候就不需要疯狂地new projects了。
activity
activity相当于是页面。官方点的解释是这样的:
Activity 是 Android 应用程序中的一个核心组件,它代表了用户界面的一个单独屏幕或窗口。每个 Activity 都提供了一个用于与用户交互的界面,可以包括按钮、文本输入框、图像等。
在 Android 应用程序中,通常会有多个 Activity,每个 Activity 负责处理不同的用户界面和交互逻辑。用户可以在这些 Activity 之间进行切换,从而让应用程序能够提供多个不同的功能。
每个 Activity 都有一个生命周期(Lifecycle),包括以下主要阶段:
- 创建阶段(onCreate): Activity 第一次被创建时调用,通常在这里进行初始化操作。
- 启动阶段(onStart): Activity 可见但未获得用户焦点时调用。
- 恢复阶段(onResume): Activity 获得用户焦点时调用。
- 暂停阶段(onPause): Activity 失去用户焦点但仍然可见时调用,常用于释放资源。
- 停止阶段(onStop): Activity 不可见时调用。
- 销毁阶段(onDestroy): Activity 被销毁时调用,通常在这里进行资源释放。
- 重新创建阶段(onRestart): Activity 从停止状态重新启动时调用。
Activity 之间可以通过 Intent 进行通信和切换,可以传递数据和启动其他 Activity。
💡注:在 AndroidManifest.xml 文件中,需要在其中注册所有的 Activity,以便系统知道如何管理它们。
Intent
Intent(意图)是在 Android 中用于在不同组件(如 Activity、Service、BroadcastReceiver 等)之间进行通信的一种机制。它用于描述应用程序中的一个操作,比如启动一个新的 Activity、启动一个 Service、发送一个广播等。
“Intent” 这个单词在英语中表示一种意图、目的或者打算。在 Android 开发中,”Intent” 被用作一种通信机制,它表示了执行一个特定动作或者实现一个特定目的的意图。
Intent 可以用来:
- 启动组件: 通过 Intent 可以启动另一个 Activity、Service、BroadcastReceiver 或者 Content Provider。
- 传递数据: 通过 Intent 可以在不同组件之间传递数据,比如字符串、整数、对象等。
- 发起动作: 通过 Intent 可以发起某种动作,比如打开一个网页、拨打电话、发送邮件等。
- 接收系统广播: 通过注册 BroadcastReceiver 并使用 IntentFilter,你可以接收系统发出的广播消息,比如网络状态变化、电池状态变化等。
总的来说,Intent 是 Android 中实现组件之间通信和协作的重要机制,它能够将不同组件连接起来,实现复杂的应用逻辑。
例如,你可以使用 Intent 启动一个新的 Activity,传递一些数据给它,然后在新的 Activity 中处理这些数据。
1 | Intent intent = new Intent(MainActivity.this, SecondActivity.class); |
💡注:这里的`"key"`是用于在 Intent 中标识传递数据的唯一字符串。它用于在发送和接收数据时对数据进行标识和匹配。 当你使用 putExtra() 方法将数据放入 Intent 时,你需要提供一个字符串键(key)和对应的数值或者对象。这个键就是用来在接收端识别和获取对应数据的标识符。
在 SecondActivity 中可以通过获取 Intent 中的数据来处理:
1 | Intent intent = getIntent(); |
总的来说,Intent 在 Android 开发中是非常重要的一个概念,它是实现组件之间通信的桥梁。