Android APP 学习
01 TextView控件
01 基础属性
layout_width:组件宽度
layout_hight:组件的高度
id:为TextView设置一个组件id,可以通过java代码获取
text:设置显示的文本内容
textColor:设置字体颜色
textStyle:设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)
textsize:字体大小,单位一般是用sp
background :控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片
gravity :设置控件中内容的对齐方向,TextView 中是文字,ImageView 中是图片等等。
02 带阴影的TextView
android :shadowColor :设置阴影颜色需要与shadowRadius 一起使用
android :shadowRadius :设置阴影的模糊程度设为0.1就变成字体颜色了建议使用3.0
android :shadowDx :设置阴影在水平方向的偏移就是水平方向阴影开始的横坐标位置
android :shadowDy :设置阴影在竖直方向的偏移就是竖直方向阴影开始的纵坐标位置
03 实现跑马灯效果的TextView
android :singleLine :内容单行显示
android :focusable :是否可以获取焦点
android :focusablelnTouchMode :用于控制视图在触摸模式下是否可以聚焦
android :ellipsize :在哪里省略文本
android :marqueeRepeatLimit :字幕动画重复的次数
02 Button控件
01 Button事件处理
点击事件
长按事件
触摸事件
03 EditText
01 主要属性
android :hint输入提示
android :textColorHint 输入提示文字的颜色
android :inputType 输入类型
android :drawableXxxx 在输入框的指定方位添加图片
android :drawablePadding 设置图片与输入内容的间距
android :paddingXxxx 设置内容与边框的间距
android :background 背景色
04 ImageView
01 主要属性
android:src 设置图片资源
android:scaleType 设置图片缩放类型
有哪些缩放类型:
fitstart 保持宽高比缩放图片,直到较长的边与lmage的边长相等,缩放完成后将图片放在lmageview的左上角
fitCentef默认值,同上,缩放后放于中间
fitEnd同上,缩放后放于右下角
fitxy 对图像的横纵方向进行独立缩放,使得该图片完全适应ImageView,但是图片的宽高比可能会发生改变
center 保持原图的大小,显示在lmageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。
centerCrop 保持宽高比缩放图片,直到完全覆盖ImageView,可能会出现图片的显示不完全
centerlnside 保持宽高比缩放图片,直到ImageView能够完全地显示图片
matrix 不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理
android:maxHeight 最大高度
android:maxWidth 最大宽度
android:adjustViewBounds 调整View的界限
05 ProgressBar-进度条
01 常用属性讲解
android:max:进度条的最大值
android:progress:进度条已完成进度值
android:indeterminate:如果设置成true,则进度条不精确显示进度style="?
android:attrprogressBarStyleHorizontal"水平进度条
06 Notification-通知
01 Notification与NotificationManager
创建一个NotificationManager
NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。在Activity中,可以使用Activity:getSystemService(String)方法获取NotificationManager对象,Activity.getsystemservice(String)方法可以通过Android系统级服务的句柄,返回对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION SERVICE即可。使用Builder构造器来创建Notification对象
使用Notificationcompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常工作。Android8.0新增了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的机器上显示
02 NotificationChannel
通知渠道:Android8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。
通知重要程度设置,NotificationManager类中
IMPORTANCE NONE 关闭通知
IMPORTANCE MIN 开启通知,不会弹出,但没有提示音,状态栏中无显示
IMPORTANCE_LOW 开启通知,不会弹出,不发出提示音,状态栏中显示
IMPORTANCE DEFAULT 开启通知,不会弹出,发出提示音,状态栏中显示
IMPORTANCE HIGH 开启通知,会弹出,发出提示音,状态栏中显示
03 常见方法说明
setContentTitle(String string)设置标题
setContentText(String string)设置文本内容
setSmalllcon(int icon)设置小图标
setLargelcon(Bitmapicon)设置通知的大图标
setColor(int argb)设置小图标的颜色
setContentlntent(PendingIntent intent)设置点击通知后的跳转意图
setAutoCancel(boolean boolean)设置点击通知后自动清除通知
setWhen(long when)设置通知被创建的时间
07 Toolbar
01 常用属性
android:layout width="match_parent'
android:layout height="?attr/actionBarSize'
android:background="#ffff00"
app:navigationlcon="@drawable/ic_baseline_arrow_back_24"
app:title="主标题”
app:titleTextColor="#ff0000"
app:titleMarginStart="90dp"
app:subtitle="子标题”
app:subtitleTextColor="#00ffff"
app:logo="@mipmap/ic_launcher"
08 AlertDialog
01 实现方式
AlertDialog.Builder builder=new AlertDialog.Builder(context);构建Dialog的各种参数
Builder.setlcon(int iconld);添加ICON
Builder.setTitle(CharSequence title);添加标题
Builder.setMessage(CharSequence message);添加消息
Builder.setView(View view);设置自定义布局
Builder.create();创建Dialog
Builder.show();显示对话框
setPositiveButton 确定按钮
setNegativeButton 取消按钮
setNeutralButton 中间按钮
09 PopupWindow
01 常用方法
setContentView(View contentView):设置PopupWindow显示的View
showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor,int xoff, intyoff):相对某个控件的位置,有偏移
setFocusable(boolean focusable)设置是否获取焦点
setBackgroundDrawable(Drawable background)设置背景
dismiss() 关闭弹窗
setAnimationStyle(int animationStyle)设置加载动画
setTouchable(boolean touchable)设置触摸使能
setOutsideTouchable(boolean touchable)设置PopupWindow外面的触摸使能
10 LinearLayout-布局
01 常见属性
orientation 布局中组件的排列方式
gravity 控制组件所包含的子元素的对齐方式,可多个组合
layout_gravity控制该组件在父容器里的对其方式
background为该组件设置一个背景图片,或者是直接用颜色覆盖divider 分割线
showDividers 设置分割线所在的位置,none(无),beginning(开始),end(结束),middle(每两个组件间)
dividerPadding 设置分割线的 padding
layout_weight(权重)该属性是用来等比例的划分区域
11 RelativeLayout-布局
01 常见属性
根据父容器定位
layout_alignParentLeft左对齐
layout_alignParentRight右对齐
layout_alignParentTop 顶部对齐
layout_alignParentBottom底部对齐
layout_centerHorizontal 水平居中
layout_centerVertical垂直居中
layout_centerInParent中间位置
根据兄弟组件定位
layout_toLeftof放置于参考组件的左边
layout_toRightof放置于参考组件的右边
layout_above放置于参考组件的上方
layout_below放置于参考组件的下方
layout_alignTop 对齐参考组件的上边界
layout_alignBottom 对齐参考组件的下边界
layout_alignLeft 对齐参考组件的左边界
layout_alignRight 对齐参考组件的右边界
12 FrameLayout-布局
注意该布局从屏幕左上角开始绘制,如果位置重合,后绘制的组件会覆盖上一个组件
常见属性
android:foreground 设置前景
android:foregroundGravity 设置前景位置
13 TableLayout-表格布局
01 常见属性
android:collapseColumns 设置需要被隐藏的列的序号,从0开始
android:stretchColumns 设置允许被拉伸的列的列序号,从0开始
android:shrinkColumns 设置允许被收缩的列的列序号,从0开始
子控件设置属性
android:layout column 显示在第几列
android:layout span 横向跨几列
14 GridLayout
01 常用属性
android:orientation 设置水平显示还是垂直显示
android:columnCount 设置行的显示个数
android:rowCount 设置列的显示个数
15 ConstraintLayout-约束布局
这个可以熟练去使用拖拉拽开发
16 ListView
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/tv"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
// 创建一个对象
public class Bean {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class MainActivity extends AppCompatActivity {
// 自己构造一个数据
private List<Bean> datas = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (int i = 0; i < 100; i++) {
Bean bean = new Bean();
bean.setName("李信良"+i);
datas.add(bean);
}
ListView listView = findViewById(R.id.lv);
// 借助一个Adapter去渲染数据
listView.setAdapter(new MyAdapter(datas,this));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("Arden", "onItemClick: "+position);
}
});
}
}
// 自定义的Adapter
public class MyAdapter extends BaseAdapter {
private List<Bean> data;
private Context context;
public MyAdapter(List<Bean> data, Context context) {
this.data = data;
this.context = context;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
// 这里的渲染我们使用了ViewHolder来减少了‘convertView.findViewById(R.id.tv)’次数,优化
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
viewHolder.textView = convertView.findViewById(R.id.tv);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(data.get(position).getName());
return convertView;
}
// 优化渲染时间
private final class ViewHolder {
TextView textView;
}
}
17 RecyclerView
可以理解为一个加强了的ListView
但是要注意,在使用这个的时候,是需要先去导包,不能直接使用
18 动画
01 动画类型
逐帧动画(frame-by-frame animation)
补间动画(tweened animation)
属性动画(property animation)
常见问题积累
1.页面重复跳转问题
如果我们在两个页面之间进行来回条跳转的时候,当我们返回的时候会发现也会在两个页面之间进行来回的跳转,这是由于使用了栈这个数据结构,当我们返回时会依次弹出栈。
解决方法是设置一个标记Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent intent = new Intent(this, ShoppingChannelActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
该标记的作用是当进行页面跳转的时候,如果在栈中已经存在这个栈帧,那就把这个栈上面的所有栈帧全部弹出,保留跳转的栈在最顶层。