1.1 活動
活動是什么
- 包含用戶界面,主要用于和用戶進行交互
- 一個應用程序 可以有0個或者多個活動
活動的用法
-
活動的創建
New -> Activity -> Empty Activity
- 繼承自
AppCompatActivity
- 重寫
onCreate()
方法
-
創建布局
res -> New -> Diretory
-
在當前活動中添加布局
setContentView(R.layout.first_layout)
在AndroidManifest 文件中注冊
package
: 程序的包名
android:label
:標題欄的內容和啟動器中應用程序顯示的名稱
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jianshudemo">
<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/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
- 在活動中使用Toast
Toast.makeText(this, "hello world", Toast.LENGTH_SHORT).show();
- 在活動中使用 Menu
在
res
目錄 中新建一個menu
的文件夾在
menu
文件夾上右鍵新建Menu resource file
菜單xml文件內容
id
: 菜單項的唯一指定的標識符
title
: 菜單項的名稱
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add_item"
android:title="Add"
/>
<item android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
- 創建并顯示菜單
onCreateOptionsMenu
: 重寫的父類方法
Menu menu
: 系統提供的菜單組件
getMenuInflater()
: Activity 提供的菜單填充器
R.menu.main
: 菜單的資源文件
return true;
: 是否顯示該菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
- 菜單的響應事件
onOptionsItemSelected
: 重寫的父類方法
MenuItem item
: 要傳入的菜單項
item.getItemId()
: 獲取菜單項的資源ID
switch
: 根據菜單項資源ID的不同采取不同的動作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this, "ADD", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this, "REMOVE", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
- 銷毀一個活動
finish()
Intent
顯示Intent
明確的告知啟動的是哪個目標
MainActivity.this
當前類的對象
SecondActivity.class
目錄類對象
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
隱式Intent
不明確指出啟動哪個目錄
com.example.jianshudemo.ACTION_START
用來指定動作
intent.addCategory("com.example.jianshudemo.MY_CATEGORY");
用來指定目錄
只有action
和category
匹配才能響應Intent
一個Intent只能添加一個action
,卻可以指定多個category
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.jianshudemo.ACTION_START");
intent.addCategory("com.example.jianshudemo.MY_CATEGORY");
startActivity(intent);
}
});
向下一活動傳遞數據
intent.putExtra("key","value");
下一活動取數據 ,getXxxExtra
根據數據類型不同傳入指定的類型獲取數據
getIntent().getStringExtra("key");
返回數據給上一個活動
- 上一活動使用
startActivity
并設置請求碼 - 下一活動使用
setResult
并設置返回碼 - 上一活動重寫父類的
OnActivityResult
方法, 判斷請求碼和返碼是否一致,取數據
活動的生命周期
-
OnCreate()
活動第一次創建時調用 , 這個方法里完成初始化操作 -
OnStart
由不可見變為可見時調用 -
OnResume
活動已準備好和用戶進行交互進調用 -
OnPause
活動被遮蓋時調用 -
OnStop
活動不可見時調用 -
OnDestroy
活動被銷毀前調用 -
onRestart
活動凪停止狀態變為運行狀態時調用
1.2 UI
- TextView
android:id
android:width:match_parent
android:text
android:text-size:12sp
: 文字大小單位
android:gravity:center
: 文字水平垂直居中
Button
事件監聽器,匿名內部類EditText
android:hint
: 提示文本
android:maxLines
:最大顯示行
ed_passwd.getText.toString()
: 獲取輸入框對象的內容ImageView
android:src
: 指定圖片資源
imagview.setImageResource(R.drawalbe.img_1)
: 代碼設置圖片資源ProgressBar
android:visibility:visiable
visible
: 可見 ;invisible
:不可見占用屏幕空間gone
:不可見不占用屏幕空間
style:"?android:attr/progressBarStyleHorizontal"
: 默認為圓形,設置水平進度條
android:max=100
: 設置最大進度值
progressBar.setVisible(View.GONG)
:通過代碼設置組件是否可見
progressBar.getVisible
: 判斷組件是否可見
progressBar.setProgress(10)
: 設置進度AlertDialog
.setCancelable(false)
表示不能通過Back
鍵進行取消
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("這是一個對話框")
.setMessage("這里展示很重要的信息")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
});
引入布局
引入布局可以實現布局的重用
<include layout="@layout/title"/>
RecyclerView
- 引入依賴
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
- 加入布局文件
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
- 創建適配器
public class FruitAdapter extends RecyclerView.Adapter {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
}
- 創建ViewHolder靜態內嵌類
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 0;
}
static class ViewHolder extends RecyclerView.ViewHolder{
public ViewHolder(View itemView) {
super(itemView);
}
}
}
- 設置布局管理器
recyclerView.setLayoutManger(new LinearLayoutManger(this));
- 填充數據
recyclerView.setAdater(new FruitAdapter(mDatas));