控件
TextView
基本的长宽,文字的类型textStyle(normal无效果、bold粗体、italic斜体),文字的大小textSize
带阴影的文字效果:
- shadowColor 阴影颜色
- shadowRadius 阴影模糊程度(0.1为原本、3.0为推荐效果)
- shadowDx、shadowDy 水平、竖直移动
跑马灯效果
- singleLine 内容单行显示
- focusable 是否可以获取焦点
- focusableInTouchMode 控制视图在触摸模式下是否可聚焦
- ellipsize 省略文本,start省略号在前、end在后、marquee跑马灯选这种
- marqueeRepeatLimit 字母动画重叠次数
按钮按下,开始运行的三种方法
- 布局空间中设置 clickable =“true”
- 自定义控件MyTextView
- 添加
<requestFocus/>
获取焦点
Button
继承TextView,所以功能Button功能都可实现
StateListDrawable 为Drawable资源的一种
- 关键节点
<selector>
- drowable 引用的Drawable位图
- android:state_pressed //是否按下,如一个按钮触摸或者点击。
- android:state_focused //是否取得焦点,比如用户选择了一个文本框。
- android:state_hovered //光标是否悬停,通常与focused state相同,它是4.0的新特性
- android:state_selected //是否被选择,针对有滚轮的情况
- android:state_checked //被checked了,如:一个RadioButton可以被check了。
- android:state_enabled //能够接受触摸或者点击事件,是否可用
- android:state_checkable //是否被勾选,限checkbox使用
注意点
按钮背景无法改变颜色的情况如何解决:通过修改values的themes的parent=“。。。.Bridge”即可
Button时间处理
触摸事件
- ACTION_DOWN 0
- ACTION_UP 1
- ACTION_MOVE 2
EditText
联想登录注册时的账号、密码等。
- hint 提示、textColorHint
- inputType 输入类型
- drawableXXXX 在输入框指定方位添加图片
- drawablePadding 设置图片与输入内容的间距
- paddingXXXX 内容与边框的间距
<!-- inputType=phone时只有数字可以输入
textpassword时为密码 自动隐藏
numberpassword时仅数字 隐藏
android:drawableLeft="@drawable/ic_baseline_how_to_reg_24"图片靠左-->
<!-- android:drawablePadding="20sp" 两者间距-->
<!-- android:paddingLeft="10sp" 人物与左边距离-->
<EditText
android:hint="请输入用户名"
android:textColorHint="#95a1aa"
android:drawableLeft="@drawable/ic_baseline_how_to_reg_24"
android:layout_width="300sp"
android:inputType="textPassword"
android:drawablePadding="20sp"
android:paddingLeft="10sp"
android:layout_height="100sp"></EditText>
ImageView
scaleType属性分为多种,这里主要举例四种
- fitStart 保持宽高比 左上
- fitCenter 保持宽高比 中间
- fitXY 独立缩放 比例大概率改变
- center 保持 出则裁剪
<!-- 调整max直到满足某一个max-->
<ImageView
android:layout_width="100sp"
android:layout_height="200sp"
android:scaleType="centerInside"
android:maxHeight="100sp"
android:maxWidth="50sp"
android:adjustViewBounds="true"
android:src="@drawable/a"/>
ProgressBar
默认进度条
<ProgressBar
android:id="@+id/pd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
直线进度条
<!-- max=100每次增加1/100的意思-->
<!-- 以下为水平进度条-->
<!-- android:indeterminate="false"true向转圈的、不显示进度条,false是默认的、显示进度条-->
<ProgressBar
android:indeterminate="false"
android:id="@+id/pd2"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
模拟下载直线进度条的运行
//模拟下载
public void load(View view){
int progress = progressBar2.getProgress();
progress+=10;
progressBar2.setProgress(progress);
}
NotificationManager
存在问题为
- 真机调试没有显示时间
- 小图标没有用,默认为软件的图标
- 点击弹窗无法跳转
重点
- 创建一个通知管理器 以单例模式获得,在Activity_getService(String)方法获取NotificationManager对象 直接传递Context.NOTIFICATION_SERVICE
- 使用Builde构造器来创建Notification对象 使用NotificationCompat类的Builder构造器创建Notication对象
注意:Android8.0新增通知渠道概念,如果没有设置,则通知无法在Android8.0的机器上显示。
代码
布局中设置两个按钮作为触发装置
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发出通知"
android:onClick="sendNotification"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消通知"
android:onClick="cancelNotification"/>
JAVA代码中
private NotificationManager manager;
private Notification notification;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通知
manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//channelld渠道通知
//判断sdk版本,8.0以上可用
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
//importance代表重要程度
NotificationChannel channel = new NotificationChannel("一致1","用户进去可以看到,不重要",NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(channel);
}
//创建通知栏的意图
Intent intent = new Intent(this,NotificationActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0, intent,0);
notification = new NotificationCompat.Builder(this,"一致1")
.setContentTitle("通知标题")
.setContentText("内容")
//设置小图标
//安卓从5.0开始,对于通知栏图标进行修改,谷歌要求所有通知栏图标,应该使用alpha图层进行回执,而且不包括RGB图层
//简单来说,图片不能带颜色;传值为int型icon
.setSmallIcon(R.drawable.ic_baseline_how_to_reg_24)
//右边显示图片的大图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.a))
//小图标的颜色,传入为int,如果是十六进制的话需要强转rgb
.setColor(Color.parseColor("#ff0000"))
//点击后会跳转
.setContentIntent(pendingIntent)
//点击后取消
.setAutoCancel(true)
//通知被创建的时间,但不设置时即为默认现在的时间
// .setWhen(1000)
.build();
}
//发出通知
public void sendNotification(View view){
//id随便写,都行,但两个方法里面id需要保持一致
manager.notify(1,notification);
}
//取消通知
public void cancelNotification(View view){
//保持一致的id
manager.cancel(1);
}
Toolbar(用于替换ActionBar)
更加灵活设置导航栏
首先需要在values的文件夹下的themes.xml中将“。。。.DarkActionBar”改为“。。。.NoActionBar”(变为没有上面的栏目)
- 让导航栏中的文字在最中间,始终最中间
android:text="标题"
android:layout_gravity="center"
android:gravity="center"
- 布局设置的注意点(第一种方法)
<!-- android:layout_height="?attr/actionBarSize"取决项目中设置的颜色-->
<!-- app:navigationIcon="@drawable/ic_baseline_arrow_back_ios_24"设置时-->
<!-- 记得设置app的位置eg.xmlns:app="http://schemas.android.com/apk/res-auto"
用的app的,所以不是安卓里面自带的东西-->
xmlns:app="http://schemas.android.com/apk/res-auto"
<androidx.appcompat.widget.Toolbar
android:id="@+id/tb"
app:navigationIcon="@drawable/ic_baseline_arrow_back_ios_24"
app:title="标题"
android:layout_width="match_parent"
app:titleTextColor="#fff000"
app:titleMarginStart="10sp"
app:subtitle="子标题"
app:subtitleTextColor="#00ffff"
app:logo="@drawable/ic_launcher_foreground"
android:layout_height="?attr/actionBarSize"
android:background="@color/purple_200">
</androidx.appcompat.widget.Toolbar>
- java文件中设置(第二种方法)
Toolbar toolbar2 = findViewById(R.id.tb2);
toolbar2.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_24);
toolbar2.setTitle("标题");
toolbar2.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("this","toolbar2被点击了");
}
});
AlertDialog
基础为提示弹窗,无按钮无dialogView
public void isClick(View view){
View dialogView = getLayoutInflater().inflate(R.layout.dialog_view,null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher)
.setTitle("我是对话框")
.setMessage("今天天气怎么样")
//三个按钮,不同的手机的位置不一样
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
//中间按钮
.setNeutralButton("中间的", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setView(dialogView)
.create()//AlterDialog里面的
.show();//Dialog里面的,所以顺序不能改(后面两个顺序不能变)
}
Popupwindow
将主布局与popup_view分开
public void isClick(View view){
View popupView = getLayoutInflater().inflate(R.layout.popup_view, null);
//popup的两个按钮
Button btn1 = popupView.findViewById(R.id.b1);
Button btn2 = popupView.findViewById(R.id.b2);
//focusable的true代表点击空白处可直接退出
PopupWindow popupWindow = new PopupWindow(popupView,
ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
//相对于某个空间的位置anchor(正左下方),无偏移
popupWindow.showAsDropDown(view);
// popupWindow.showAsDropDown(view,view.getWidth(), view.getHeight());
//设置背景色,可以为图片,但需要为数字,待解决的问题
popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher_background));
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();//二次点击做退出处理
}
});
}
下载注意点
如果电脑没有任何配置,没有设置环境变量等,则Settings、Do not import—、Send usage statistics to Google.
当弹窗弹出时Unable to acces: Android SDK add-on list,选择cancel
选择Standard,标准下载
新建项目时
Name与Save location最后:(…\Name)保持一致
设置Minimun SDK 5.0以上
gitignore代表版本 :
- 内是用于app的
- 外是用于工程的
proguard-rules.pro 项目代码的混淆规则
drawable、drawable-v24都是用于放照片的
valuse文件夹用于放置颜色、样式、主题