Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

第 110 章 Activity

目录

110.1. 界面佈局
110.1.1. setContentView
110.1.2. 隐藏虚拟键
110.1.3. 保持屏幕常开
110.1.4. 标题栏添加返回按钮
110.2. 显式四种跳转方式
110.2.1. startActivity()
110.2.2. App 间跳转
110.2.3. intentActivityResultLauncher 跳转
110.2.4. startActivityForResult 替代方案
110.3. 生命周期
110.3.1. 定时关闭
110.3.2. 恢复触发
110.3.3. 返回触发
110.3.4. Activity 关闭
110.3.5. 重启自己
110.4. Activity 间数据传递
110.4.1. Intent 方式
110.4.2. Bundle 方式
110.4.3. Flag 属性
110.4.4. 返回值
110.5. DataBinding
110.6. 键盘事件
110.6.1. onKeyDown 键盘按下事件
110.6.2. dispatchKeyEvent
110.6.3. 屏蔽 KeyEvent.KEYCODE_BACK
110.6.4. 判断按下次数
110.7. 鼠标事件
110.8. 分享
110.8.1. 分享文本内容
110.8.2. 分享图片
110.8.3.
110.9. 剪切板
110.10. 软键盘控制
110.11. Res 资源
110.11.1. 通过名称查找 layout ID
110.11.2. 查找 drawable 资源 ID
110.11.3. 获取 color 颜色 ID
110.11.4. 获取 array.xml 文件下某个字段的 ID
110.11.5. 获取 style.xml 文件下的某个样式的 id

110.1. 界面佈局

110.1.1. setContentView

		
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     <application android:label="Test">
 
		...
		...
        <activity android:name=".WriteActivity"></activity>

    </application>

</manifest>		
		
			
			
setContentView(R.layout.view);			
			
			

110.1.2. 隐藏虚拟键

		
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE;
        getWindow().getDecorView().setSystemUiVisibility(uiOptions);	
        
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiOptions);        	
		
			

Android API 30

		
        WindowInsetsController controller = getWindow().getDecorView().getWindowInsetsController();
        controller.hide(WindowInsets.Type.statusBars());
        controller.hide(WindowInsets.Type.navigationBars());
        controller.hide(WindowInsets.Type.systemBars());		
		
			

110.1.3. 保持屏幕常开

		
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);		
		
			

取消设置

		
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);		
		
			

110.1.4. 标题栏添加返回按钮

onCreate 中添加

		
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_activity);

        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
	}
		
			

Activity 中添加

		
 	@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
                return true;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

		
			

在AndroidManifest.xml中标明Activity的主题

		
<activity
            android:name=".ui.ShareActivity"
            android:exported="false"
            android:theme="@style/AppTheme"/>		
		
			

values/styles.xml 文件中增加

		
 	<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorThemeBackGround</item>
        <item name="colorPrimaryDark">@color/colorThemeBackGround</item>
        <item name="colorAccent">@color/colorThemeBackGround</item>
    </style>