Android

Android

一.控件

1.TextView

  1. layout. _width:组件的宽度
  2. layout _heightr:组件的高度
  3. id:为TexView设置-一个组件id
  4. text:设置显示的文本内容
  5. textColor:设置字体颜色
  6. textstyle:设置字体风格,三个可选值: nomall无效果), bold(加粗), tlc/斜体)
  7. textsize:字体大小,单位一般是用sp
  8. background:控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片
  9. gravity:设置控件中内容的对齐方向,TextView中是文字, ImageView中是图片等等。
  10. minLines:最少显示几行内容
  11. maxLines:最大显示几行内容

2.带阴影的TextView

  1. android:shadowColor:设置 阴影颜色,需要与shadowRadius一起使用
  2. android:shadowRadus:设 置阴影的模糊程度,设为0.1就变成字体颜色了建议使用3.0
  3. android:shadowDx:设 置阴影在水平方向的偏移,就是水平方向阴影开始的橫坐标位置
  4. android:shadowDy:设 置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置

3.实现跑马灯效果的TextView

  1. android:singleLine:内容单行显示(其他以省略号代替)
  2. android:focusable:是否 可以获取焦点
  3. android:focusablelnTouchMode:用 于控制视图在触摸模式下是否可以聚焦
  4. android:ellipsize:在哪里 省略文本
  5. android:marqueeRepeatLimit:字幕动画重复的次数

4.Button

  1. StateListDrawable
    • drawable:引用的Drawable位图
    • state_focused:是否获得焦点
    • state_pressed:控件是否被按下
    • state_enabled:控件是否可用
    • state_selected:控件是否被选择,针对有滚轮的情况
    • state_checked:控件是否被勾选
    • state_checkable:控件可否被勾选eg:checkbox
    • state_ window_focused:是否获得窗口焦点
    • state_active:控件是否处于活动状态,eg:slidingTab
    • state_singe:控件包含多个子控件时,确定是否只显示一个子控件
    • state_first:控件包含多个子控件时,确定第一个子 控件是否处于显示状态
    • state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
    • state_last:控件包含多个子控件时,,确定最后一个子控件是否处于显示状态
  2. ImageButton图片按钮
  3. RadioButton单选按钮
    • android:checked:设置默认单选按钮
    • < RadioGroup >< RadioGroup/ >:设置单选按钮组,将单选按钮标签放入即可

5.EditText

  1. android:hint:输入提示
  2. android:textColorHint:输入提示文字的颜色
  3. android:inputType:输入类型
  4. android:drawableXXX:在输入框的指定方位添加图片
  5. android:drawablePadding:设置图片与输入内容的间距
  6. android:paddingXXX:设置内容与边框的间距
  7. lines:设置编辑行显示几行
  8. android:background:背景色

6.ImageView

  1. 主要属性
    1. android:src:设置图片资源
    2. android:scaleType:设置图片缩放类型
    3. android:maxHeight:最大高度
    4. android:maxWidth:最大宽度
    5. android:adjustViewBounds:调整View的界限
  2. 图片缩放类型
    1. fitStart:保持宽高比缩放图片,直到较长的边与Image的边长相等缩放完成后将图片放在ImageView的左上角
    2. fitCenter:默认值,同上,缩放后放于中间
    3. fitEnd:同上,缩放后放于右下角
    4. fitXY:对图像的横纵方向进行独立缩放,使得该图片完全适应ImageView,但是图片的宽高比可能会发生改变
    5. center:保持原图的大小,显示在ImageView的中心。 当原图的size大于ImageView的size,超过部分裁剪处理。
    6. centerCrop:保持宽高比缩放图片,直到完全覆盖lmageView,可能会出现图片的显示不完全
    7. centerInsde:保持宽高比缩放图片,直到ImageView能够完全地显 示图片
    8. matrix:不改变原图的大小,从ImageView的左 上角开始绘制原图,原图超过 ImageView的部分作裁剪处理
  3. Java
    1. setImageAlpha():设置透明度,图片透明度在0-255之间

7.ProgressBar进度条

  1. android:max:进度条的最大值
  2. android:progress:进度条已完成进度值
  3. android:indeterminate:如果设置成true, 则进度条不精确显示进度
  4. style=“?android:attr/progressBarStyleHorizontal”:水平进度条
  5. Java:setProgress():更新进度

8.Notification

  1. 创建一个NotificationManager

    ​ NoticationManager类是一个通知管理器类, 这个对象是由系统维护的服务,是以单例模式的方式获得,所以
    ​ 一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取
    ​ NotificationManager对象,Activity.getSystemService(String)方法 可以通过Android系统级服务的句柄,返回 对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_ SERVICE即可。

  2. 使用Builder构造器来创建Notification对象

    ​ 使用NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都
    ​ 能正常工作。Android8.0新增 了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的机器上显示

  3. NotificationChannel

    ​ 通知渠道:Android 8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。

    1. 通知重要程度设置, NotificationManager类中:

      ​ IMPORTANCE_NONE:关闭通知
      ​ IMPORTANCE_MIN:开启通知,不会弹出,但没有提示音,状态栏中无显示
      ​ IMPORTANCE_Low:开启通知,不会弹出,不发出提示音,状态栏中显示
      ​ IMPORTANCE_DEFAULT:开启通知,不会弹出,发出提示音,状态栏中显示
      ​ IMPORTANCE_HIGH:开启通知,会弹出,发出提示音,状态栏中显示

  4. 常见方法说明(java)
    1. setContEentTitle(String string):设置标题
    2. setContentText(String string):设置文本内容
    3. setsSmllcon(int icon):设置小图标
    4. setLargelcon(Bitmap icon):设置通知的大图标
    5. setColorfint argb):设置小图标的颜色
    6. setContentntent(PendingIntent intent):设置点击通知后的跳转意图
    7. setAutoCancel(boolean boolean):设置点击通知后自动清除通知
    8. setWhen(long when):设置通知被创建的时间

9.Toolbar

  1. android:layout_height=“?attr/actionBarSize”:?attr/actionBarSize设置标题行
  2. app:navigationlcon=" @drawable/ic":设置标题行图标
  3. app:title=“主标题”:设置主标题内容
  4. app:titleTextColor=" ff0000:设置标题字体颜色
  5. app:titleMarginStart=“90dp”:设置左内边距
  6. app:subtitle=“子标题”:设置子标题
  7. app:subtitleTextColor=" #ffff:设置标题背景颜色
  8. app:logo=" @mipmap/ic. _launcher":设置logo图片
java:
  public class WangJiActivity extends Activity {
      @Override
      protected void onCreate(@Nullable Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.wangji_activity);
          Toolbar t = findViewById(R.id.t);
          //给标题行的图标设置点击事件
          t.setNavigationOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  finish();
              }
          });
      }
  }

10.AlertDialog

java:
  1. AlertDialog. Builder builder = new AlertDialog Builder(context):构建Dialog的各种参数
  2. Builder.setlcon(int iconld):添加ICON
  3. Builder .setTitle(CharSequence title):添加标题
  4. Builder.setMessage(CharSequence message):添加消息
  5. Builder.setView(Vlew view):设置自定义布局
  6. Builder.createl():创建Dialog
  7. Builder.show():显示对话框
  8. setPositiveButton:确定按钮
  9. setNegativeButton:取消按钮
  10. setNeutralButton:中间按钮

11.PopupWindow

java:
  1. setContentView(View contentView):设置PopupWindow显示的View
  2. showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
  3. showAsDropDown(View anchor, int xoff, int yof):相对某个控件的位置,有偏移
  4. setFocusable(boolean focusable):设置是否获取焦点
  5. setBackgroundDrawable(Drawable background):设置背景
  6. dismiss():关闭弹窗
  7. setAnimationstyleint animationStyle):设置加载动画
  8. setTouchable(boolean touchable):设置触摸使能
  9. setOutsideTouchable(boolean touchable):设置PopupWindow外面的触摸使能

12.DatePicker日期选择器

java:
public class MainActivity extends Activity {

    int year, month, day;

    DatePicker datePicker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        datePicker = findViewById(R.id.dp1);
        //获取一个日历对象 对它进行实例化
        Calendar calendar = Calendar.getInstance();
        year = calendar.get(Calendar.YEAR);
        month = calendar.get(Calendar.MONTH);
        day = calendar.get(Calendar.DAY_OF_MONTH);
        //初始化日期选择器
        datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker datePicker, int i, int i1, int i2) {
                MainActivity.this.year = i;
                MainActivity.this.month = i1;
                MainActivity.this.day = i2;
                show(i, i1, i2);
            }
        });
    }

    private void show(int year, int month, int day) {
        String str = year + "年" + (month + 1) + "月" + day + "日";
        Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
    }
}

13.TimePicker时间选择器

java:
public class MainActivity extends AppCompatActivity {

    TimePicker timePicker ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timePicker = findViewById(R.id.tp1);
        //默认为12小时进制  如果想设置为24小时 则需把下面修改为true
        timePicker.setIs24HourView(true);
        timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker timePicker, int i, int i1) {
                String str = i + "时" + i1 + "分";
                Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

14.Chronometer计时器

  1. android:format:设置显示的时间格式显示格式,默认是"MM:SS"或"H:MM:SS",以%s来格式化

  2. java:
  public class MainActivity extends AppCompatActivity {
  
      Chronometer ch;
      @RequiresApi(api = Build.VERSION_CODES.N)
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          //设置全屏显示
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                  WindowManager.LayoutParams.FLAG_FULLSCREEN);
  
          ch = findViewById(R.id.c1);
          //设置起始时间
          ch.setBase(SystemClock.elapsedRealtime());//SystemClock.elapsedRealtime()获取当前时间
          ch.setFormat("%s");
  //        ch.setCountDown(true);//设置为倒计时
          //开启计时器
          ch.start();
          //计时监听器
          ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
              @Override
              public void onChronometerTick(Chronometer chronometer) {
                  //判断计时时间是否到达60秒
                  if (SystemClock.elapsedRealtime()-ch.getBase()>=60000){
                      ch.stop();//停止计时
                  }
              }
          });
  
      }
  }

15.SeekBar拖动条

  1. android:thumb:替换掉拖动按钮的图片

  2. android:max:最大拖动长度比

  3. android:progress:当前长度比

  4. java:
  public class MainActivity extends AppCompatActivity {
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          SeekBar seekBar = findViewById(R.id.sb);
          //设置拖动监听器
          seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
              @Override//进度改变的时候执行的方法                     i表示当前进度
              public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                  Toast.makeText(MainActivity.this, "进度改变:"+i, Toast.LENGTH_SHORT).show();
              }
  
              @Override//开始触摸的时候执行的方法
              public void onStartTrackingTouch(SeekBar seekBar) {
                  Toast.makeText(MainActivity.this, "开始触摸", Toast.LENGTH_SHORT).show();
              }
  
              @Override//停止触摸的时候执行的方法
              public void onStopTrackingTouch(SeekBar seekBar) {
                  Toast.makeText(MainActivity.this, "停止触摸", Toast.LENGTH_SHORT).show();
              }
          });
      }
  }

16.RatingBar星级评分条

  1. android:numStars:设置星星的数量
  2. android:rating:默认点亮几颗星
  3. android:stepSize:设置选择几颗星(例如:一次选一颗星,一次选半颗星,一次选一颗半星)
  4. android:isIndicator:设置为true星星就不能被改变

17.Spinner下拉列表

  1. android:entries:设置列表项的内容

  2. java:
       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           Spinner s = findViewById(R.id.s);
           s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
               @Override
               public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                   String r = s.getItemAtPosition(i).toString();
                   Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show();
               }
   
               @Override
               public void onNothingSelected(AdapterView<?> adapterView) {
   
               }
           });
   
       }

18.ListView列表视图

  1. android:entries:设置列表项的内容

19.ScrollView滚动视图

  1. < HorizontalScrollView >< HorizontalScrollView />:横向滚动

20.TabHost选项卡

  1. < TabWidget >< Tabwidget />:选项卡标题
  2. < FrameLayout >< FrameLayout />:选项卡内容

21.GridView网格视图

  1. android:numColumns:设置网格列数

二.布局

1.LinearLayout线性布局管理器

  1. orientation:布局中组件的排列方式
  2. gravity:控制组件所包含的子元素的对齐方式,可多个组合
  3. layout_ gravity:控制该组件在父容器里的对其方式
  4. background:为该组件设置-个背景图片,或者是直接用颜色覆盖
  5. divider:分割线
  6. showDividers:设置分割线所在的位置,none(无), beginning(开始), end(结 束),middle{每 两个组件间)
  7. dividerPadding:设置分割线的padding
  8. layout. _weight(权重):该属性是用来等比例的划分剩余区域

2.RelativeLayout相对布局管理器

  1. 根据父容器定位
    1. layout. alignParentleft:左对齐
    2. layout_alignParentRight:右对齐
    3. layout_alignParentTop:顶部对齐
    4. layout_alignParentBottom:底部对齐
    5. layout_centerlForizontal:水平居中
    6. layout_centerVertical:垂直居中
    7. layout_centernParent:中间位置
  2. 根据兄弟组件定位
    1. layout_toLeftof:放置于参考组件的左边
    2. layout_toRightOf:放置于参考组件的右边
    3. layout_above:放置于参考组件的上方
    4. layout_below:放置于参考组件的下方
    5. layout_algnTo:对齐参考组件的上边界
    6. layout_alignBottom:对齐参考组件的下边界
    7. layout_aignleft:对齐参考组件的左边界
    8. layout_alignRight:对齐参考组件的右边界
  3. 通用:margin设置组件与父容器的边距
    1. layout_margin 上下左右偏移
    2. layout_marginLeft
    3. layout_marginRight
    4. layout_marginTop
    5. layout_margiBottom
  4. 通用:padding设置组件内部元素的边距
    1. padding上下左右偏移
    2. paddingLeft
    3. paddingRight
    4. paddingTop
    5. paddingBottom

3.FrameLayout帧布局管理器

  1. android:foreground:设置前景
  2. android:foregroundGravity:设置前景位置

4.TableLayout表格布局管理器

  1. 常见属性
    1. :多个内容放一行,超出宽度的将不会显示
    2. android:collapseColumns:设置需要被隐藏的列的序号,从0开始
    3. android:stretchColumns:设置允许被拉伸的列的列序号,从0开始(有剩余空间的前提下)
    4. android:shrinkColumns:设置允许被收缩的列的列序号,从0开始
  2. 子控件设置属性
    1. android:layout_column:显示在第几列(默认在第0列显示)
    2. android:layout_span:横向跨几列

5.GridLayout

  1. 常见属性
    1. android:orientation:设置水平显示还是垂直显示
    2. android:columnCount:设置行的显示个数
    3. android:rowCount:设置列的显示个数
  2. 子控件属性
    1. android:layout_column:显示在第几列
    2. android:layout_columnSpan:横向跨几列 可能需要android:layout_gravity="fill"进行配合使用
    3. android:layout_columnWeight:横向剩余空间分配方式
    4. android:layout_gravity:在网格中的显示位置
    5. android:layout_row:显示在第几行
    6. android:layout_rowSpan:横向跨几行
    7. android:layout_rowWeight:纵向剩余空间分配方式

三.Activity

1. Activity的四种状态:

**可见:**运行状态(正常运行时)、暂停状态(弹出退出询问对话框)、**不可见:**停止状态(确认退出时)、销毁状态(在手机应用程序信息中,点击强制停止)

2. Activity的生命周期:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVDhWHuq-1647488910011)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220317074803784.png)]

3. Activity创建:

  1. 创建java类继承Activity

  2. 重写onCreate()回调方法

  3. 设置要显示的视图

package com.example.activity;

import android.os.Bundle;

import androidx.annotation.Nullable;

public class Activity extends android.app.Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

  1. 配置Activity,找到AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.activity">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Demo3">
        <activity
            android:name=".Activity2"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <-- 此处为配置内容 --!>
        <activity
            android:name=".Activity"
            android:label="详细" />
         <-- 到这结束--!>
    </application>

</manifest>
  1. 第二种创建方法:右键包名 --> New --> Activity --> Empty Activity

4. 启动Activity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b = findViewById(R.id.button);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //创建Intent对象
                Intent intent = new Intent(MainActivity.this,Activity.class);
                //启动Activity
                startActivity(intent);
            }
        });
    }
}

5. 关闭Activity

public class Activity extends android.app.Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.finish);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //关闭当前的Activity
                finish();
            }
        });
    }
}

6. 使用Bundle在Activity之间交换数据

  1. 什么是Bundle?

    以键值对的形式进行保存,通过key拿到value值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EP9ru1zn-1647488910013)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220317103954135.png)]

  1. 传值
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b = findViewById(R.id.bt1);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                EditText editText1 = findViewById(R.id.et1);
                String s1 = editText1.getText().toString();

                EditText editText2 = findViewById(R.id.et2);
                String s2 = editText2.getText().toString();

                EditText editText3 = findViewById(R.id.et3);
                String s3 = editText3.getText().toString();

                EditText editText4 = findViewById(R.id.et4);
                String s4 = editText4.getText().toString();

                EditText editText5 = findViewById(R.id.et5);
                String s5 = editText5.getText().toString();

                if (!"".equals(s1) && !"".equals(s2) && !"".equals(s3) && !"".equals(s4) && !"".equals(s5)) {
                    Intent intent = new Intent(MainActivity.this,BActivity.class);
                    //创建Bundle保存信息
                    Bundle bundle = new Bundle();
                    bundle.putCharSequence("s1",s1);
                    bundle.putCharSequence("s2",s2);
                    bundle.putCharSequence("s3",s3);
                    bundle.putCharSequence("s4",s4);
                    bundle.putCharSequence("s5",s5);
                    //将Bundle保存到intent里
                    intent.putExtras(bundle);
                    startActivity(intent);
                } else {
                    Toast.makeText(MainActivity.this, "请将收货地址填写完整", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}
  1. 取值
public class BActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bactivity);
        //先获取传过来的intent对象
        Intent intent = getIntent();
        //取出intent里的Bundle
        Bundle bundle = intent.getExtras();
        String s1 = bundle.getString("s1");
        String s2 = bundle.getString("s2");
        String s3 = bundle.getString("s3");
        String s4 = bundle.getString("s4");
        String s5 = bundle.getString("s5");
        TextView textView = findViewById(R.id.text1);
        textView.setText(s1 + " " + s2 + " " + s3 + "  " + s4 + ":" + s5);
    }
}

7. 调用另一个Activity并返回结果

  1. 接收的Activity
public class MainActivity extends AppCompatActivity {
    //ActivityResultLauncher需要放在外面提前注册
    ActivityResultLauncher<Intent> objectActivityResultLauncher =  objectActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {
            if(result.getResultCode() == 0x11 && result.getData()!=null){
                Bundle bundle = result.getData().getExtras();
                int imageId = bundle.getInt("imageId");
                ImageView imageView = findViewById(R.id.image1);
                imageView.setImageResource(imageId);
            }

        }
    });
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.bt1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, HeadActivity.class);
                //启动activity
                objectActivityResultLauncher.launch(intent);
            }
        });
    }
}
  1. 传值得Activity
public class HeadActivity extends AppCompatActivity {

    public int[] imageId = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_head);
                Intent intent = getIntent();
                Bundle bundle = new Bundle();
                bundle.putInt("imageId", imageId[1]);
                intent.putExtras(bundle);
                setResult(0x11, intent);
                //关闭当前Activity
                finish();

    }
}

8.Fragment

  1. Fragment的生命周期

在这里插入图片描述

  1. 创建Fragment
    可选择创建java类,并继承Fragment,重写onCreateView()方法,用来设置所显示的内容
public class ListFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //加载一个布局文件
        View view = inflater.inflate(R.layout.fragment_list,container,false);
        return view;
    }
}
  1. 在Activity中添加Fragment

<fragment
        android:id="@+id/list"
        android:name="com.example.fragment2.ListFragment"//要引用的fragment的java文件
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1" />

java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建fragment实列
        DetailFragment detailFragment = new DetailFragment();

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();
        //第一个参数是容器可以填写FrameLayout(帧布局管理器)的id,第二参数是fragment
        ft.add(android.R.id.content,detailFragment);
        //提交
        ft.commit();

    }
}

9.Intent

  1. Intent对象的属性:
    1. Component name: 组件名称,用来设置Intent组件名称

      //ComponentName c = new ComponentName("应用的包名","类名(包含包名)"
      ComponentName c= new ComponentName("com.example.intent","com.example.intent.DetailActivity");
      Intent setComponent(c)
      
    2. Action:动作
      Data:数据

      	public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              TextView dianhua = findViewById(R.id.dianhua);
              TextView duanxin = findViewById(R.id.duanxin);
      
              dianhua.setOnClickListener(o);
              duanxin.setOnClickListener(o);
          }
      
          View.OnClickListener o = new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Intent i = new Intent();
                  TextView t = (TextView) view;
                  //点击电话
                  if (t.getId() == R.id.dianhua){
                      //设置动作
                      i.setAction(i.ACTION_DIAL);//标识用于调用拨号面板
                      i.setData(Uri.parse("tel:15546290218"));//设置intent的data属性
                  }else {//点击短信
                      //设置动作
                      i.setAction(i.ACTION_SENDTO);//标识发送短信
                      i.setData(Uri.parse("smsto:15546290218"));
                      //设置短信默认内容
                      i.putExtra("sms_body","Hello word");
                  }
                  startActivity(i);
              }
          };
      }
      

      给app开启(电话 短信)权限

      	<?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.actionordata">
      
          <!--开启打电话的权限-->
          <uses-permission android:name="android.permission.CALL_PHONE"/>
          <!--允许发送短信的权限-->
          <uses-permission android:name="android.permission.SEND_SMS"/>
      
          <application
              android:allowBackup="true"
              android:icon="@mipmap/ic_launcher"
              android:label="@string/app_name"
              android:roundIcon="@mipmap/ic_launcher_round"
              android:supportsRtl="true"
              android:theme="@style/Theme.Demo3">
              <activity
                  android:name=".MainActivity"
                  android:exported="true">
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
      
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
          </application>
      
      </manifest>
      
    3. Category:种类

      @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              Button button = findViewById(R.id.b);
              //点击按钮返回到手机桌面
              button.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      Intent intent = new Intent();
                      intent.setAction(intent.ACTION_MAIN);
                      //设置Category的属性
                      intent.addCategory(intent.CATEGORY_HOME);//桌面
                      startActivity(intent);
                  }
              });
          }
      
    4. Extras:附加信息

      putExtras();//传输Bundle对象
      getExtras();//取出Bundle对象
      
    5. Flags:标志

      	public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              Button b = findViewById(R.id.b);
              b.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      Intent intent = new Intent(MainActivity.this,DetailActivity.class);
                      //让当前activity不在历史栈中保留,用户离开它,这个activity就自动关闭
                      intent.setFlags(intent.FLAG_ACTIVITY_NO_HISTORY);
                      startActivity(intent);
                  }
              });
          }
      }
      
  2. Intent的种类

    1. 显示Intent
      在这里插入图片描述

      • 创建Intent对象的语法格式如下:

        Intent intent = new Intent(Context packageContext,Class<T>class)
        
    2. 隐式Intent
      在这里插入图片描述

      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              Button button = findViewById(R.id.b);
              button.setOnClickListener(new View.OnClickListener() {
                  //通过隐式intent打开网页
                  @Override
                  public void onClick(View view) {
                      Intent intent = new Intent();
                      intent.setAction(intent.ACTION_VIEW);//这个常量标识把数据显示给用户
                      intent.setData(Uri.parse("http://www.baidu.com"));
                      startActivity(intent);
                  }
              });
          }
      }
      

    在这里插入图片描述

  3. Intent过滤器

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/Theme.Demo3" >
            <activity
                android:name=".MainActivity"
                android:exported="true" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            
    		<!------------------------新增位置------------------------->
            <activity
                android:name=".ShowActivity"
                android:exported="true">
                <!--intent过滤器-->
                <intent-filter>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </activity>
            <!------------------------新增位置------------------------->
            
        </application>
    

四.事件

  1. 点击事件

    Button b = findViewById(R.id);
    b.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //点击触发的方法
                }
            });
    
  2. 触摸事件

        public boolean onTouchEvent(MotionEvent event) {
            //触摸触发的方法
            return super.onTouchEvent(event);
        }
    
  3. 按下物理按钮事件

        public boolean onKeyDown(int keyCode, KeyEvent event) {
    		//按下触发的方法
            return super.onKeyDown(keyCode, event);
        }
    
  4. 抬起物理按钮事件

        public boolean onKeyUp(int keyCode, KeyEvent event) {
            //抬起触发的方法
            return super.onKeyUp(keyCode, event);
        }
    
  5. 长按物理按钮事件

    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    		//长按物理按钮事件
            return super.onKeyLongPress(keyCode, event);
        } 
    
  6. 长按事件

    T.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                	//长按执行的方法
                    return false;
                }
            });
    
  7. 值改变事件

    et.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    			//文字值改变时执行
                }
    
                @Override
                public void afterTextChanged(Editable editable) {
    
                }
            });
    
  8. 物理按键的常量

    1. 音量键:KeyEvent.KEYCODE_VOLUME_UP / KeyEvent.KEYCODE_VOLUME_DOWN
    2. 电源键:KeyEvent.KEYCODE_POWER
    3. 返回键:KeyEvent.KEYCODE_BACK
    4. 主屏键:KeyEvent.KEYCODE_HOME
    5. 菜单键:KeyEvent.KEYCODE_MENU
  9. 触摸事件监听器

    T.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    return false;
                }
            }); 
    
  10. 手势检测

    1. GestureDetector类:手势检测器
    2. GestureDetector.OnGestureListener:需要实现这个接口
      需要继承下面的6个方法:
      1. onDown():触摸事件按下时触发
      2. onFling():用户在触摸屏上拖过时触发
      3. onLongPress():用户在屏幕上长按时触发
      4. onScroll()
      5. onShowPress()
      6. onSingleTapUp():用户在屏幕上轻击时触发

五.资源

  1. 字符串资源

    1. 定义字符串资源文件:< string >

    2. 使用字符串资源:

      1. 在xml文件中:@string/s
      2. 在java文件中:
        text.setText(getResources().getString(R.string.s));
        
    3. 在项目这个位置设置字符串资源

      在这里插入图片描述

  2. 颜色资源

    1. 颜色值的定义:# 透明度 R G B(透明度可省略)
    2. 获取颜色值的其他方法:
      在这里插入图片描述
    3. 定义颜色资源文件:< color >
    4. 使用颜色资源:
      1. 在xml文件中
      2. 在java文件中
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              TextView t = findViewById(R.id.tv);
              //此写法需要在build.gradle配置文件中将sdk最小版本调整为23
              t.setTextColor(getColor(R.color.bg));
              //此写法不需要调整sdk
              t.setBackgroundColor(getResources().getColor(R.color.title));
          }
      }
      	```
      
      
  3. 尺寸资源

    1. dp的应用范围:边距、组件大小
    2. sp的应用范围:设置字体
    3. 定义尺寸资源文件:< dimen >
    4. 使用尺寸资源:
      1. 在xml文件中:创建dimens.xml
      2. 在java文件中
        public class MainActivity extends AppCompatActivity {
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                TextView textView = findViewById(R.id.tv);
                //设置字体
                textView.setTextSize(getResources().getDimension(R.dimen.title));
            }
        }
        
  4. 布局资源:
    在一个布局文件中包含另一个布局文件(xml):

    <include layout="@layout/image"></include>
    
  5. 数组资源

    1. 定义数组资源文件(xml):

      1. < array >子元素:颜色、字符串、尺寸资源
      2. < integer-array >子元素:整形(0 20 300 0xFF6600)元素
      3. < string-array >子元素:字符串资源(放到这里的都会被当做字符串处理)
    2. 使用数组资源:
      1. 在xml文件中引用
      2. 在java中引用:

      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              //获取字符串数组资源
              String [] arr = getResources().getStringArray(R.array.list);
          }
      }
      
  6. Drawable资源

    1. 图片资源:.png、.jpg、.gif、.9.png
    2. StateListDrawable资源:
      1. res/drawable下创建drawable.xml

        <?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!--得到或失去焦点的样式-->
            <item android:state_focused="true" android:color="#f60"/>
            <item android:state_focused="false" android:color="#0a0"/>
        </selector>
        	
        
      2. 引用drawable文件

        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            xmlns:android="http://schemas.android.com/apk/res/android">
        
            <EditText
                android:id="@+id/e1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@drawable/editext_focused"
                android:text="嗨害嗨"/>
        
            <EditText
                android:id="@+id/e2"
                android:textColor="@drawable/editext_focused"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="嗨害嗨2"/>
        </LinearLayout>
        
  7. mipmap(桌面图标)资源
    在这里插入图片描述

  8. 主题资源

    1. values/styles.xml就是自定义主题资源的文件
    2. java中设置主题资源
       public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setTheme(R.style.bgTheme);//需要放在setContentView()方法之前
              setContentView(R.layout.activity_main);
      
          }
      }
      
  9. 样式资源

    1. 设定样式资源:
         <style name="title">
              <item name="android:textSize">30sp</item>
              <item name="android:textColor">#06F</item>
          </style>
       
      
    2. 使用样式资源:
      <EditText
              android:id="@+id/et"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              style="@style/title" //在这里引用样式资源
              android:hint="请输入密码"/>
      
    3. 可以在< style >中继承样式资源,当有相同样式资源时,则使用子元素(< style >)的样式资源
      <style name="title">
              <item name="android:textSize">30sp</item>
              <item name="android:textColor">#06F</item>
          </style>
          <style name="context" parent="title">//子元素
          	//字体大小18替换了30
              <item name="android:textSize">18sp</item>
          </style>
      
  10. 菜单资源

    1. 创建菜单资源:
      在res下创建menu目录,创建menu.xml
      <menu xmlns:android="http://schemas.android.com/apk/res/android">
          <!--生成了四个菜单项-->
          <item android:id="message" android:title="消息"></item>
          <item android:id="homepage" android:title="首页"></item>
          <item android:id="help" android:title="帮助"></item>
          <item android:id="feedback" android:title="我要反馈"></item>
      </menu>
      
    2. 用java代码添加菜单
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
          }
      
          //重写onCreateOptionsMenu方法添加选项菜单
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              MenuInflater menuInflater = new MenuInflater(MainActivity.this);
              menuInflater.inflate(R.menu.menu,menu);//参数一:菜单资源,参数二:上面的menu对象
              return super.onCreateOptionsMenu(menu);
          }
      }
      
    3. 给菜单设置事件
       @Override
          public boolean onOptionsItemSelected(@NonNull MenuItem item) {
              switch (item.getItemId()) {
                  case R.id.settings:
                      Intent intent = new Intent(MainActivity.this, Settings.class);
                      startActivity(intent);
                      break;
                  case R.id.regard:
                      Intent intent1 = new Intent(MainActivity.this, Regard.class);
                      startActivity(intent1);
                      break;
              }
              return super.onOptionsItemSelected(item);
          }
      
  11. 上下文菜单

    1. 注册上下文菜单
      registerForContextMenu(TextView);
      
    2. 重写onCreateContextMenu( )方法,添加一个上下文菜单
      	public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){
      		MenuInflater inflater = new MenuInflater(this);
      		inflater.inflate(R.menu.menu,menu);
      	}
      
    3. 重写onContextItemSelected( )方法,指定各个菜单选项被选择时,所应做的事
      public boolean onContextItemSelected(MenuIntem item){
      //菜单选项被选择时执行的事件
      	return super onContextItemSelected(item)
      }
      

Action Bar

  1. 显示和隐藏Action Bar
    1. 在AndroidMainifest.xml里设置:

      //不显示Action Bar
      android:theme="@style/Theme.AppCompat.Light.NoActionBar"
      
    2. 在java中设置ActionBar的显示与隐藏

      public class MainActivity extends AppCompatActivity {
          @Override
          protected void onCreate(@Nullable Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              //获取Action Bar
              ActionBar actionBar = getSupportActionBar();
              Button bt1 = findViewById(R.id.xianshi);
              Button bt2 = findViewById(R.id.yincang);
              bt1.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      //显示Action Bar
                      actionBar.show();
                  }
              });
      
              bt2.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View view) {
                      //隐藏Action Bar
                      actionBar.hide();
                  }
              });
          }
      }
      
  2. Action Item
    1. 什么是Action Item在这里插入图片描述

    2. 添加Action Item的步骤
      在这里插入图片描述

    3. 创建菜单项

      <?xml version="1.0" encoding="utf-8"?>
      <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto">
          <!--添加搜索的菜单项(放大镜)
          icon:用于指定放大镜图标
          title:显示标题,有图标的话长按显示-->
          <item android:id="@+id/serch"
              android:icon="@drawable/img"
              android:title="serch"
              app:showAsAction="always" ></item>
          <!--always表示始终显示在ActionBar上
          ifRoom表示ActionBar有可用空间就显示,没用可用空间就显示在溢出菜单当中
          never表示永远不显示在ActionBar上,显示在溢出菜单
          withText白哦是显示在ActionBar上并且显示文本,但是收到图片影响可能文本显示不全或不显示-->
          <item android:id="@+id/bell"
              android:icon="@drawable/img_1"
              android:title="消 息"
              app:showAsAction="ifRoom"/>
          <item android:id="@+id/settings"
              android:title="设置"
              app:showAsAction="ifRoom"/>
          <item android:id="@+id/about"
              android:title="关于"
              app:showAsAction="never"/>
      </menu>
      
    4. 解析菜单文件

      //解析菜单文件
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              //创建MenuInflater对象
              MenuInflater inflater = getMenuInflater();
              inflater.inflate(R.menu.menu,menu);
              return super.onCreateOptionsMenu(menu);
          }
      
    5. Action Bar 的分配
      在这里插入图片描述

  3. ActionView
    1. 什么是ActionView 在这里插入图片描述

    2. 创建菜单项

       <?xml version="1.0" encoding="utf-8"?>
      <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto">
      <item android:id="@+id/serch"
          android:title="搜 索"
          app:showAsAction="always"/>
          <!--android:actionViewClass 因为需要actionView来指定 所以需要创建actionViewClass-->
      
          <item android:id="@+id/img1"
              android:title="通讯录"
              app:showAsAction="always"
              app:actionLayout="@layout/img_message"/>
          <!--app:actionLayout 指定layout文件进行显示-->
          
      </menu>
      
    3. 隐藏ActionBar上显示的标题和解析菜单项

      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              //1.先隐藏ActionBar上的显示标题
              getSupportActionBar().setDisplayShowTitleEnabled(false);
          }
          //2.解析菜单资源文件
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              MenuInflater inflater = getMenuInflater();
              inflater.inflate(R.menu.menu,menu);
              return super.onCreateOptionsMenu(menu);
          }
      }
      
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值