Android 复习

一、界面布局和控件属性,包括界面的控件图、界面的结构图、常见属性

(一) 常用控件

1、TextView

<TextView
android:id="@+id/text_view"//定义一个id
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"//内容居中
android:textSize="24sp"
android:textColor="#00ff00"
android:text="hello world"
/>

2、Button

<Button
android:id="@+id/btn_1"//定义一个id
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"//位置居中
android:textSize="24sp"
android:textColor="#00ff00"
android:text="点击"
/>

3、EditText

<EditText
android:id="@+id/edit_1"//定义一个id
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"//100%宽并且居中
android:hint="请输入用户名"//输入提示文本
/>
EditText editInput = findViewById(R.id.edit_1);
editInput.setOnClickListener(view ->{
String getInputContent = editInput.getText().toString();
});

4.ImageView

<EditText
android:id="@+id/img_1"//定义一个id
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"//位置居中
android:src="@drawable/img_icon"
/>
ImageVIew img = findViewById(R.id.img_1);
img.setOnClickListener(view ->{
img.setImageResource(R.drawable.img_icon_2);//更改图片
});

5、AlertDialog

Button dialogBtn = findViewById(R.id.dialog_btn);
dialogBtn.setOnClickListener(view -> {
AlertDialog.builder dialog = new AlertDialog.builder(this);
dialog.setTitle("对话框标题");
dialog.setMessage("对话框提示信息");
dialog.setCancelable(false);//是否取消
dialog.setPositiveButton("确认",(DialogInterface dialog,int which) -> {
//确认事件
});
dialog.setNegativeButton("取消",(DialogInterface dialog,int which) -> {
//取消事件
});
dialog.show();//显示对话框
});

(二)、界面布局

1、常用的布局有

  • LinearLayout
  • RelativeLayout
  • ConstraintLayout
  • FrameLayout
  • PrecentFrameLayout

2、LinearLayout

水平或垂直布局
<LinearLayout
android:orientation="vertical"//或者horizontal>
</LinearLayout>

3、所有的布局都是直接或间接继承ViewGroup

  • 控件继承自TextView

  • 布局继承ViewGroup

2、通过控件直接生命绑定(只对单击事件有效)
<Button
android:id="@+id/button_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hello world"
android:onclick="popUp"
/>
Public class MainActivity extends AppCompatActivity implements View.OnClickListener{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button_btn);
button.setOnClickListener(this);
}
@Override
private void onClick(View v){
if(v.getId() == R.id.button_btn){
Toast.makeText(this,"我单击事件被触发了",Toast.LENGTH_SHORT).show();
}
}
}

三、Android系统的四大组件,及其作用

  • 信使Intent

    • Activity,service,BroadcastReceiver之间通信需要Intent

    • 代表请求的意图

    • ContentPrivider不需要,因为有ContentResolver

    • 显示Intent

      1、启动
      Intent intent = new Intent(Activity.this,toActivity.class);
      intent.putExtra("name","chen");
      startActivity(intent);
      //返回数据给上一个应用
      startActivityForResult(intent,1);
      @Override
      private void onActivityResult(int reqCode,int resultCode,Intent data){
      if(reqCode == RESULT_OK){
      string data = data.getStringExtra("age");
      }
      }
      2、接收
      Intent intent = getIntent();
      String name = intent.getStringExtra("name");
      //返回数据给上一个应用
      Intent intent = new Intent();
      intent.putExtra("age",18);
      setResult(RESULT_OK,intent);
      finish();
    • 隐藏Intent:

      1、首先在Mainifest中进行声明
      <Activity android:name=".toBeActivity">
      <intent-filter>
      <action android:name="com.tobeStart"/>
      <category android:name="android.intent.category.DEFAULT">
      <intent-filter/>
      <Activity/>
      2、在事件中启动
      Intent intent = new Intent('com.toBeStart');
      startActivity(intent);

Activity

Android所有可见页面都是Activity,前台届界面

他是app的表示层

作用:与用户交互,显示信息

BroadcastReceiver

广播消息监听

监听系统广播、其他应用程序广播,其他组件广播

ContentPrivider 共享数据

用于进程间共享数据

另一个app需要通过ContentResolver与ContentProvider来通信

Service

后台服务,无用户界面

四、掌握 Activity 的生命周期状态,各个状态间转换时调用方法

  • 目的提高内存的利用率,映入App生命周期机制

  • 特点:生命周期不由app进程控制,系统决定

  • 优先级

    • 前台进程:前台Activity或前台Service,或正在处理广播

    • 可见进程:Activity可见但不在最前

    • 服务进程:拥有后台Service,Activity不可见或不存在

    • 后台进程: Activity不可见,并且没有Service

    • 空进程: 没有Activity和Service

  • Activity声明周期

    1、onCreate()//它在活动第一次被创建的时候调用。加载布局、绑定事件
    2、onStart()//在活动由不可见变为可见时调用
    3、onResume()//在活动准备好和用户进行交互时调用。此时活动处于返回栈顶,运行状态。
    4、onPause()//系统准备启动或恢复另一个活动时调用,通常在此释放CPU资源
    5、onStop()//活动完全不可见的时候调用
    6、onRestart()//由停止状态变为运行状态时调用
    7、onDestory()//销毁之前调用,之后活动得状态将变为销毁状态

五、使用List View和Adapter进行界面动态开发的一般方法

1、声明List<Map<String,Object>> lists

2、初始化数据 int[] photos = new int[]{R.drawable.tiger};String[] new String[]{"李白"}; String[] desc = new String[]{"诗仙"}

3、初始化化列表

lists = new ArrayList<Map<String,Obeject>>();
for(int i=0; i<names.length;i++){
Map<String,Object> listItem = new HashMap<String,Object>();
listItem.put("img",photos[i]);
listItem.put("name",names[i]);
listItem.put("desc",desc[i]);
lists.add(listItem);
}

4、装配Adapter

SimpleAdapter adapter = new SimpleAdapter(this,lists,R.layout.item,new String[]{"img","name","desc"},new int[]{R.id.img,R.id.name,R.id.desc});
mListView.serAdapter(adapter);

六、List View的事件处理

//查看
mListView.setOnItemClickListener((AdapterView<?> adapterView,View,view,int position,long id) ->{
lists.get(position).get("name").toString();
});
//删除
mListView.setOnItemLongClickListener((AdapterView<?> adapterView,View,view,int position,long id) ->{
lists.remove(position);
adapter.notifyDataSetChanged();
});
//添加
LayoutInflater factory = LayoutInflater.from(this);
View viewDiag = factory.inflate(R.layout.add_item_dialog, null);
View viewDiag = factory.inflate(R.layout.add_item_dialog, null);
EditText userNameET = viewDiag.findViewById(R.id.addNameItem);
EditText userDescET = viewDiag.findViewById(R.id.addDescItem);
//在lists显示内容中添加一行
Map<String,Object> listitem=new HashMap<String,Object>();
listitem.put("header", photos[0]);
listitem.put("name", et_name.getText().toString());
listitem.put("desc", et_introduce.getText().toString());
lists.add(listitem); //提示adapter刷新页面
adapter.notifyDataSetChanged();

七、数据存储的类别,掌握SP和SQlite的使用

1、声明、初始化

SharedPreferences pref;
SharedPreferences.Editor editor;
pref = getSharedPreferences("cookies",MODE_PRIVATE);
pref.getBoolean("isLogin",false);
//get
editor = pref.edit();
editor.putBoolean("isLogin",true);
editor.apply();