一、控件学习
1.TextView
1.1基本属性
- layout_width,组件宽度
- layout_height,组件高度
"match_parent"和容器一致,容器有多大,就有多大
"wrap_content"根据内容调整大小、
“200dp”直接给数字
- id,为Textview设置一个组件id
可以实现在java函数中调用组件,并且通过接口修改组件属性
TextView tv_one =findViewById(R.id.tv_one);
tv_one.setText("leo");
组件唯一标识符
- text,设置显示文本信息
一般为了国际化方便,要将内容写在res/values/strings.xml
- textColor,设置字体颜色
"#00 00 00 00"前两位透明,后面依次RGB
- textStyle,设置字体风格,三个值可选,normal(默认无效果),bold,italic
- textSize,单位sp,适配不同大小的手机屏幕
- background,控件背景颜色,或者图片
颜色“#00000000”, 正规开发颜色要写到res/values/colors.xml
- gravity,设置控件中内容对齐向,TextView是文字,ImageView中是图片等等
“center”,“bottom”,“left”,“right”,“center_horizontal”,"center_virtical",自己看标签属性
1.2 带阴影的TextView
- android::shadowColor,设置阴影颜色,需要与shadowRadius一起使用。
- android::shadowRadius,设置阴影的模糊程度,设为"0.1"就变成字体颜色了,建议使用"3.0"。
- android::shadowDx,设置阴影在水平方向的偏移,就是水平方向阴影开始的横坐标位置。
- android::shadowDy,设置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置。
1.3 实现跑马灯效果的TextView
- android::singleLine,内容单行显示,
先设置文字单行显示,这个时候文字会被省略一部分,省略的显示“...“
- android::ellipsize,在哪里省略文本
=”marquee“(跑马灯选这个), ”start“, ”end“
- android::marqueeRepeatLimit,字幕动画重复次数
=”marquee_forever“
- android::focusable,是否可以获取焦点
="true"
动画只有获取焦点才可以运行,
(1)除非直接请求焦点<requestFocus/>
(2)实现自己的类,并且重写isFocused()函数
- android::focusableInTouchMode,用于控制视图在触摸模式下是否可以聚焦
2.Butten
2.1 StateListDrawable
StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点,<selector>,我们只需要将Button的background属性设置为该Drawable资源即可轻松实现,按下按钮时不同的按钮颜色或者背景。
- drawable,引用drawable位图
- state_focused,是否获取焦点
- state_pressed,控件是否被按下
- state_enabled,控件是否可用
- state_selected,控件是否被选择,针对有滚轮的情况
- state_checked,控件是否被勾选
- state_checkable,控件可否被勾选,eg:checkbox
- state_ ......
一般将APP的icon放在minmap文件夹下,其他图片资源放在drawable文件夹下。
怎么用Drawable?
创建一个文件夹,在res下,然后在文件夹里面天机资源文件,再添加DrewableReourseFile,再在里面添加item,设置item属性。
这个是图片
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_baseline_accessibility_24"
android:state_pressed="true"/>
<item android:drawable="@drawable/ic_baseline_account_balance_24"
android:state_pressed="false"/>
</selector>
还可以创建颜色,一样的方法。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#FFFF0000"
android:state_pressed="true"/>
<item color="#FF00FF00"
android:state_pressed="false"/>
</selector>
完成后,就直接在UI.xml的函数里面调用这个资源,它自动把这个用起来。
2.2 Button点击事件、触摸事件、长按事件
- 点击事件
- 长按事件
- 触摸事件
package com.example.myapplication;
import android.os.Bundle;
import com.google.android.material.snackbar.Snackbar;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.example.myapplication.databinding.ActivityMainBinding;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "leo";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn=findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Log.e(TAG,"onClick");
}
});
btn.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick(View view) {
Log.e(TAG,"onLOngClick");
return false;
}
});
btn.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.e(TAG,"onTouchClick"+ motionEvent.getAction());
return false;//返回true表示事件被消费了
}
});
}
}
单独设计各种事件响应的处理函数,控件自带接口,接口的参数就是处理函数。
3. EditText
3.1 主要属性
- andriod:hint 输入提示
- andriod:textColorHint 输入提示文字颜色
- andriod:intputType 输入类型
- andriod:drawableXxxxx 在输入框的指定位置添加图片
drawableLeft=" "
- andriod:paddingXxxx 设置内容与边框的间距
- andriod:background 背景色或者图片
- 同时,EditText类内部还有很多函数,比如getText()等等
4. ImageView
4.1 基本属性
- andriod:src 设置图片资源
- andriod:scaleType 设置图片缩放类型
"fitStart" 保持宽高比缩放图片,直到较长的边与image的边长相等,缩放完成后将图片放在ImageView的左上角。
"fitCenter" 默认值,同上,缩放后放在中间。
"fitEnd" 同上,缩放后放于右下角。
"fitXY" 对图片的横纵方向进行独立缩放,使得该图片完全适应ImageView,但是图片的宽高比可能发生变化。
"center" 保持原图大小,放在ImageView的中心。当原图的ImageView的size,超过部分裁剪处理。
"centerCrop" 保持宽高比缩放图片,直到完全覆盖ImageView,坑出现图片显示不完全。
"centerInside" 保持完整的宽高比缩放图片,直到ImageView能够完全的显示图片。
"matrix" 不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分做裁剪处理。
- andriod:maxHeight 最大高度,配合andriod:adjustViewBounds,才生效。
- andriod:maxWidth 最大宽度,配合andriod:adjustViewBounds,才生效。
- andriod:adjustViewBounds 调整View的界限,最大宽高需要和次函数联合用。
5. ProgressBar进度条
5.1 基本属性
- andriod:max 进度条的最大值
- andriod:progress 进度条已完成进度值
- andriod:indetermine 如果设置成true,则进度条不精度显示进度。
- style="?andriod:attr/progressBarStyleHorizontal" 水平进度条
5.2 实现点击按钮显示进度条
public void leoclick(View view) {
if(progress.getVisibility()==View.GONE){
progress.setVisibility(View.VISIBLE);
}
else {
progress.setVisibility(View.GONE);
}
}
}
5.3 实现水平进度条
//先设置ui.xml progressBar 的max ,和style
public void leoclick(View view) {
int progress = this.progress1.getProgress();
progress+=10;
progress1.setProgress(progress);
}
6. Notification于NotificationManager
6.1 创建一个NotificationManager
NotificationManager类是一个通知管理类,这个对象是由系统维护的服务,是以单例模式的方式获取得,所以一般并不实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Android系统级服务句柄,返回对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可。
6.2 使用Builder构造器来创建Notification对象
使用NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常使用。Android8.0新增了通知渠道这个概念,如果没有设置,则无法在Android8.0的机器上显示。
6.3 NotificationChannel
通知渠道:Android8.0引入了通知渠道,其允许你为要显示的每种通知类型创建用户可自定义的渠道。
通知重要程度设置,NotificationManager类中,
- IMPORTANCE_NONE
- IMPORTANCE_MIN 开启通知,不会弹出,但没有提示音,状态栏无显示。
- IMPORTANCE_LOW 开启通知,不会弹出,没有提示音,状态栏显示。
- IMPORTANCE_DEFAULT 开启通知,不会弹出,有提示音,状态栏显示。
- IMPORTANCE_HIGH 开启通知,会弹出,有提示音,状态栏有显示。
6.4 常见方法说明
- setContentTitle(String string)设置标题
- setContentText(String string)设置文本内容
- setSmallIcon(int icon)设置小图标
- setLargeIcon(Bimap icon)设置通知大图标
- setColor(int argb)设置小图标颜色
- setContentIntent(PendingIntent intent) 设置点击后的跳转意图
- setAutoCancel(boolean bool)设置点击通知后自动清除
- setWhen(long when) 设置通知被创建的时间
注意:
Android5.0系统后,开始对通知栏图标的设计进行修改,现在Google要求,所有应用程序的通知栏图标,应该只使用alpha图层来绘制,而不是RGB图层,简单的说,就是没颜色的图片。
7. ToolBar
<androidx.appcompat.widget.Toolbar
android:id="@+id/tb"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"<!-- 和之前的尺寸一样 -->
app:navigationIcon="@drawable/ic_baseline_chevron_left_24"
app:title="标题"
app:titleTextColor="#ffff00"
app:titleMarginStart="90dp"
app:subtitle="子标题"
app:logo="@drawable/ic_baseline_change_history_24"
/>