Android
一.控件
1.TextView
- layout. _width:组件的宽度
- layout _heightr:组件的高度
- id:为TexView设置-一个组件id
- text:设置显示的文本内容
- textColor:设置字体颜色
- textstyle:设置字体风格,三个可选值: nomall无效果), bold(加粗), tlc/斜体)
- textsize:字体大小,单位一般是用sp
- background:控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片
- gravity:设置控件中内容的对齐方向,TextView中是文字, ImageView中是图片等等。
- minLines:最少显示几行内容
- maxLines:最大显示几行内容
2.带阴影的TextView
- android:shadowColor:设置 阴影颜色,需要与shadowRadius一起使用
- android:shadowRadus:设 置阴影的模糊程度,设为0.1就变成字体颜色了建议使用3.0
- android:shadowDx:设 置阴影在水平方向的偏移,就是水平方向阴影开始的橫坐标位置
- android:shadowDy:设 置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置
3.实现跑马灯效果的TextView
- android:singleLine:内容单行显示(其他以省略号代替)
- android:focusable:是否 可以获取焦点
- android:focusablelnTouchMode:用 于控制视图在触摸模式下是否可以聚焦
- android:ellipsize:在哪里 省略文本
- android:marqueeRepeatLimit:字幕动画重复的次数
4.Button
-
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:控件包含多个子控件时,,确定最后一个子控件是否处于显示状态
-
ImageButton图片按钮
-
RadioButton单选按钮
- android:checked:设置默认单选按钮
- < RadioGroup >< RadioGroup/ >:设置单选按钮组,将单选按钮标签放入即可
5.EditText
- android:hint:输入提示
- android:textColorHint:输入提示文字的颜色
- android:inputType:输入类型
- android:drawableXXX:在输入框的指定方位添加图片
- android:drawablePadding:设置图片与输入内容的间距
- android:paddingXXX:设置内容与边框的间距
- lines:设置编辑行显示几行
- android:background:背景色
6.ImageView
-
主要属性
- android:src:设置图片资源
- android:scaleType:设置图片缩放类型
- android:maxHeight:最大高度
- android:maxWidth:最大宽度
- android:adjustViewBounds:调整View的界限
-
图片缩放类型
- fitStart:保持宽高比缩放图片,直到较长的边与Image的边长相等缩放完成后将图片放在ImageView的左上角
- fitCenter:默认值,同上,缩放后放于中间
- fitEnd:同上,缩放后放于右下角
- fitXY:对图像的横纵方向进行独立缩放,使得该图片完全适应ImageView,但是图片的宽高比可能会发生改变
- center:保持原图的大小,显示在ImageView的中心。 当原图的size大于ImageView的size,超过部分裁剪处理。
- centerCrop:保持宽高比缩放图片,直到完全覆盖lmageView,可能会出现图片的显示不完全
- centerInsde:保持宽高比缩放图片,直到ImageView能够完全地显 示图片
- matrix:不改变原图的大小,从ImageView的左 上角开始绘制原图,原图超过 ImageView的部分作裁剪处理
-
Java
- setImageAlpha():设置透明度,图片透明度在0-255之间
7.ProgressBar进度条
- android:max:进度条的最大值
- android:progress:进度条已完成进度值
- android:indeterminate:如果设置成true, 则进度条不精确显示进度
- style=“?android:attr/progressBarStyleHorizontal”:水平进度条
- Java:setProgress():更新进度
8.Notification
-
创建一个NotificationManager
NoticationManager类是一个通知管理器类, 这个对象是由系统维护的服务,是以单例模式的方式获得,所以
一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取
NotificationManager对象,Activity.getSystemService(String)方法 可以通过Android系统级服务的句柄,返回 对应的对象。在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_ SERVICE即可。 -
使用Builder构造器来创建Notification对象
使用NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都
能正常工作。Android8.0新增 了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的机器上显示 -
NotificationChannel
通知渠道:Android 8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。
-
常见方法说明(java)
- setContEentTitle(String string):设置标题
- setContentText(String string):设置文本内容
- setsSmllcon(int icon):设置小图标
- setLargelcon(Bitmap icon):设置通知的大图标
- setColorfint argb):设置小图标的颜色
- setContentntent(PendingIntent intent):设置点击通知后的跳转意图
- setAutoCancel(boolean boolean):设置点击通知后自动清除通知
- setWhen(long when):设置通知被创建的时间
9.Toolbar
- android:layout_height=“?attr/actionBarSize”:?attr/actionBarSize设置标题行
- app:navigationlcon=" @drawable/ic":设置标题行图标
- app:title=“主标题”:设置主标题内容
- app:titleTextColor=" ff0000:设置标题字体颜色
- app:titleMarginStart=“90dp”:设置左内边距
- app:subtitle=“子标题”:设置子标题
- app:subtitleTextColor=" #ffff:设置标题背景颜色
- 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:
- AlertDialog. Builder builder = new AlertDialog Builder(context):构建Dialog的各种参数
- Builder.setlcon(int iconld):添加ICON
- Builder .setTitle(CharSequence title):添加标题
- Builder.setMessage(CharSequence message):添加消息
- Builder.setView(Vlew view):设置自定义布局
- Builder.createl():创建Dialog
- Builder.show():显示对话框
- setPositiveButton:确定按钮
- setNegativeButton:取消按钮
- setNeutralButton:中间按钮
11.PopupWindow
java:
- setContentView(View contentView):设置PopupWindow显示的View
- showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
- showAsDropDown(View anchor, int xoff, int yof):相对某个控件的位置,有偏移
- setFocusable(boolean focusable):设置是否获取焦点
- setBackgroundDrawable(Drawable background):设置背景
- dismiss():关闭弹窗
- setAnimationstyleint animationStyle):设置加载动画
- setTouchable(boolean touchable):设置触摸使能
- 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计时器
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拖动条
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星级评分条
- android:numStars:设置星星的数量
- android:rating:默认点亮几颗星
- android:stepSize:设置选择几颗星(例如:一次选一颗星,一次选半颗星,一次选一颗半星)
- android:isIndicator:设置为true星星就不能被改变
17.Spinner下拉列表
@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列表视图
- android:entries:设置列表项的内容
19.ScrollView滚动视图
- < HorizontalScrollView >< HorizontalScrollView />:横向滚动
20.TabHost选项卡
- < TabWidget >< Tabwidget />:选项卡标题
- < FrameLayout >< FrameLayout />:选项卡内容
21.GridView网格视图
- android:numColumns:设置网格列数
二.布局
1.LinearLayout线性布局管理器
- orientation:布局中组件的排列方式
- gravity:控制组件所包含的子元素的对齐方式,可多个组合
- layout_ gravity:控制该组件在父容器里的对其方式
- background:为该组件设置-个背景图片,或者是直接用颜色覆盖
- divider:分割线
- showDividers:设置分割线所在的位置,none(无), beginning(开始), end(结 束),middle{每 两个组件间)
- dividerPadding:设置分割线的padding
- layout. _weight(权重):该属性是用来等比例的划分剩余区域
2.RelativeLayout相对布局管理器
-
根据父容器定位
- layout. alignParentleft:左对齐
- layout_alignParentRight:右对齐
- layout_alignParentTop:顶部对齐
- layout_alignParentBottom:底部对齐
- layout_centerlForizontal:水平居中
- layout_centerVertical:垂直居中
- layout_centernParent:中间位置
-
根据兄弟组件定位
- layout_toLeftof:放置于参考组件的左边
- layout_toRightOf:放置于参考组件的右边
- layout_above:放置于参考组件的上方
- layout_below:放置于参考组件的下方
- layout_algnTo:对齐参考组件的上边界
- layout_alignBottom:对齐参考组件的下边界
- layout_aignleft:对齐参考组件的左边界
- layout_alignRight:对齐参考组件的右边界
-
通用:margin设置组件与父容器的边距
- layout_margin 上下左右偏移
- layout_marginLeft
- layout_marginRight
- layout_marginTop
- layout_margiBottom
-
通用:padding设置组件内部元素的边距
- padding上下左右偏移
- paddingLeft
- paddingRight
- paddingTop
- paddingBottom
3.FrameLayout帧布局管理器
- android:foreground:设置前景
- android:foregroundGravity:设置前景位置
4.TableLayout表格布局管理器
-
常见属性
- :多个内容放一行,超出宽度的将不会显示
- android:collapseColumns:设置需要被隐藏的列的序号,从0开始
- android:stretchColumns:设置允许被拉伸的列的列序号,从0开始(有剩余空间的前提下)
- android:shrinkColumns:设置允许被收缩的列的列序号,从0开始
-
子控件设置属性
- android:layout_column:显示在第几列(默认在第0列显示)
- android:layout_span:横向跨几列
5.GridLayout
-
常见属性
- android:orientation:设置水平显示还是垂直显示
- android:columnCount:设置行的显示个数
- android:rowCount:设置列的显示个数
-
子控件属性
- android:layout_column:显示在第几列
- android:layout_columnSpan:横向跨几列 可能需要android:layout_gravity="fill"进行配合使用
- android:layout_columnWeight:横向剩余空间分配方式
- android:layout_gravity:在网格中的显示位置
- android:layout_row:显示在第几行
- android:layout_rowSpan:横向跨几行
- android:layout_rowWeight:纵向剩余空间分配方式
三.Activity
1. Activity的四种状态:
**可见:**运行状态(正常运行时)、暂停状态(弹出退出询问对话框)、**不可见:**停止状态(确认退出时)、销毁状态(在手机应用程序信息中,点击强制停止)
2. Activity的生命周期:
3. Activity创建:
-
创建java类继承Activity
-
重写onCreate()回调方法
-
设置要显示的视图
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);
}
}
- 配置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>
- 第二种创建方法:右键包名 --> 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之间交换数据
-
什么是Bundle?
以键值对的形式进行保存,通过key拿到value值
- 传值
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();
}
}
});
}
}
- 取值
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并返回结果
- 接收的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);
}
});
}
}
- 传值得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
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;
}
}
<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
-
Intent对象的属性:
-
Component name: 组件名称,用来设置Intent组件名称
//ComponentName c = new ComponentName("应用的包名","类名(包含包名)" ComponentName c= new ComponentName("com.example.intent","com.example.intent.DetailActivity"); Intent setComponent(c)
-
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>
-
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); } }); }
-
Extras:附加信息
putExtras();//传输Bundle对象 getExtras();//取出Bundle对象
-
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); } }); } }
-
-
Intent的种类
-
显示Intent
-
创建Intent对象的语法格式如下:
Intent intent = new Intent(Context packageContext,Class<T>class)
-
-
隐式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); } }); } }
-
-
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>
四.事件
-
点击事件
Button b = findViewById(R.id); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //点击触发的方法 } });
-
触摸事件
public boolean onTouchEvent(MotionEvent event) { //触摸触发的方法 return super.onTouchEvent(event); }
-
按下物理按钮事件
public boolean onKeyDown(int keyCode, KeyEvent event) { //按下触发的方法 return super.onKeyDown(keyCode, event); }
-
抬起物理按钮事件
public boolean onKeyUp(int keyCode, KeyEvent event) { //抬起触发的方法 return super.onKeyUp(keyCode, event); }
-
长按物理按钮事件
public boolean onKeyLongPress(int keyCode, KeyEvent event) { //长按物理按钮事件 return super.onKeyLongPress(keyCode, event); }
-
长按事件
T.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { //长按执行的方法 return false; } });
-
值改变事件
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) { } });
-
物理按键的常量
- 音量键:KeyEvent.KEYCODE_VOLUME_UP / KeyEvent.KEYCODE_VOLUME_DOWN
- 电源键:KeyEvent.KEYCODE_POWER
- 返回键:KeyEvent.KEYCODE_BACK
- 主屏键:KeyEvent.KEYCODE_HOME
- 菜单键:KeyEvent.KEYCODE_MENU
-
触摸事件监听器
T.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return false; } });
-
手势检测
- GestureDetector类:手势检测器
- GestureDetector.OnGestureListener:需要实现这个接口
需要继承下面的6个方法:- onDown():触摸事件按下时触发
- onFling():用户在触摸屏上拖过时触发
- onLongPress():用户在屏幕上长按时触发
- onScroll()
- onShowPress()
- onSingleTapUp():用户在屏幕上轻击时触发
五.资源
-
字符串资源
-
定义字符串资源文件:< string >
-
使用字符串资源:
- 在xml文件中:@string/s
- 在java文件中:
text.setText(getResources().getString(R.string.s));
-
在项目这个位置设置字符串资源
-
-
颜色资源
- 颜色值的定义:# 透明度 R G B(透明度可省略)
- 获取颜色值的其他方法:
- 定义颜色资源文件:< color >
- 使用颜色资源:
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)); } } ```
-
尺寸资源
- dp的应用范围:边距、组件大小
- sp的应用范围:设置字体
- 定义尺寸资源文件:< dimen >
- 使用尺寸资源:
- 在xml文件中:创建dimens.xml
- 在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)); } }
-
布局资源:
在一个布局文件中包含另一个布局文件(xml):<include layout="@layout/image"></include>
-
数组资源
-
定义数组资源文件(xml):
- < array >子元素:颜色、字符串、尺寸资源
- < integer-array >子元素:整形(0 20 300 0xFF6600)元素
- < string-array >子元素:字符串资源(放到这里的都会被当做字符串处理)
-
使用数组资源:
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); } }
-
-
Drawable资源
- 图片资源:.png、.jpg、.gif、.9.png
- StateListDrawable资源:
-
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>
-
引用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>
-
-
mipmap(桌面图标)资源
-
主题资源
- values/styles.xml就是自定义主题资源的文件
- 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); } }
-
样式资源
- 设定样式资源:
<style name="title"> <item name="android:textSize">30sp</item> <item name="android:textColor">#06F</item> </style>
- 使用样式资源:
<EditText android:id="@+id/et" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/title" //在这里引用样式资源 android:hint="请输入密码"/>
- 可以在< 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>
- 设定样式资源:
-
菜单资源
- 创建菜单资源:
在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>
- 用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); } }
- 给菜单设置事件
@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); }
- 创建菜单资源:
-
上下文菜单
- 注册上下文菜单
registerForContextMenu(TextView);
- 重写onCreateContextMenu( )方法,添加一个上下文菜单
public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){ MenuInflater inflater = new MenuInflater(this); inflater.inflate(R.menu.menu,menu); }
- 重写onContextItemSelected( )方法,指定各个菜单选项被选择时,所应做的事
public boolean onContextItemSelected(MenuIntem item){ //菜单选项被选择时执行的事件 return super onContextItemSelected(item) }
- 注册上下文菜单
Action Bar
- 显示和隐藏Action Bar
-
在AndroidMainifest.xml里设置:
//不显示Action Bar android:theme="@style/Theme.AppCompat.Light.NoActionBar"
-
在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(); } }); } }
-
- Action Item
-
什么是Action Item
-
添加Action Item的步骤
-
创建菜单项
<?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>
-
解析菜单文件
//解析菜单文件 @Override public boolean onCreateOptionsMenu(Menu menu) { //创建MenuInflater对象 MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu,menu); return super.onCreateOptionsMenu(menu); }
-
Action Bar 的分配
-
- ActionView
-
什么是ActionView
-
创建菜单项
<?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>
-
隐藏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); } }
-