01 TextView控件

01 基础属性

  1. layout_width:组件宽度

  2. layout_hight:组件的高度

  3. id:为TextView设置一个组件id,可以通过java代码获取

  4. text:设置显示的文本内容

  5. textColor:设置字体颜色

  6. textStyle:设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)

  7. textsize:字体大小,单位一般是用sp

  8. background :控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片

  9. gravity :设置控件中内容的对齐方向,TextView 中是文字,ImageView 中是图片等等。

02 带阴影的TextView

  1. android :shadowColor :设置阴影颜色需要与shadowRadius 一起使用

  2. android :shadowRadius :设置阴影的模糊程度设为0.1就变成字体颜色了建议使用3.0

  3. android :shadowDx :设置阴影在水平方向的偏移就是水平方向阴影开始的横坐标位置

  4. android :shadowDy :设置阴影在竖直方向的偏移就是竖直方向阴影开始的纵坐标位置

03 实现跑马灯效果的TextView

  1. android :singleLine :内容单行显示

  2. android :focusable :是否可以获取焦点

  3. android :focusablelnTouchMode :用于控制视图在触摸模式下是否可以聚焦

  4. android :ellipsize :在哪里省略文本

  5. android :marqueeRepeatLimit :字幕动画重复的次数

02 Button控件

01 Button事件处理

  1. 点击事件

  2. 长按事件

  3. 触摸事件

03 EditText

01 主要属性

  1. android :hint输入提示

  2. android :textColorHint 输入提示文字的颜色

  3. android :inputType 输入类型

  4. android :drawableXxxx 在输入框的指定方位添加图片

  5. android :drawablePadding 设置图片与输入内容的间距

  6. android :paddingXxxx 设置内容与边框的间距

  7. android :background 背景色

04 ImageView

01 主要属性

  1. android:src 设置图片资源

  2. android:scaleType 设置图片缩放类型

    有哪些缩放类型:

    1. fitstart 保持宽高比缩放图片,直到较长的边与lmage的边长相等,缩放完成后将图片放在lmageview的左上角

    2. fitCentef默认值,同上,缩放后放于中间

    3. fitEnd同上,缩放后放于右下角

    4. fitxy 对图像的横纵方向进行独立缩放,使得该图片完全适应ImageView,但是图片的宽高比可能会发生改变

    5. center 保持原图的大小,显示在lmageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。

    6. centerCrop 保持宽高比缩放图片,直到完全覆盖ImageView,可能会出现图片的显示不完全

    7. centerlnside 保持宽高比缩放图片,直到ImageView能够完全地显示图片

    8. matrix 不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理

  3. android:maxHeight 最大高度

  4. android:maxWidth 最大宽度

  5. android:adjustViewBounds 调整View的界限

05 ProgressBar-进度条

01 常用属性讲解

  1. android:max:进度条的最大值

  2. android:progress:进度条已完成进度值

  3. android:indeterminate:如果设置成true,则进度条不精确显示进度style="?

  4. 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 常见方法说明

  1. setContentTitle(String string)设置标题

  2. setContentText(String string)设置文本内容

  3. setSmalllcon(int icon)设置小图标

  4. setLargelcon(Bitmapicon)设置通知的大图标

  5. setColor(int argb)设置小图标的颜色

  6. setContentlntent(PendingIntent intent)设置点击通知后的跳转意图

  7. setAutoCancel(boolean boolean)设置点击通知后自动清除通知

  8. 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 动画类型

  1. 逐帧动画(frame-by-frame animation)

  2. 补间动画(tweened animation)

  3. 属性动画(property animation)

常见问题积累

1.页面重复跳转问题

如果我们在两个页面之间进行来回条跳转的时候,当我们返回的时候会发现也会在两个页面之间进行来回的跳转,这是由于使用了这个数据结构,当我们返回时会依次弹出栈。

解决方法是设置一个标记Intent.FLAG_ACTIVITY_CLEAR_TOP

 Intent intent = new Intent(this, ShoppingChannelActivity.class);
 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent); 

该标记的作用是当进行页面跳转的时候,如果在栈中已经存在这个栈帧,那就把这个栈上面的所有栈帧全部弹出,保留跳转的栈在最顶层。