XPOSED源码研究之XposedInstaller(2)从manifest开始WelcomeActivity
来源:互联网 发布:追信魔盒在线制作软件 编辑:程序博客网 时间:2024/06/05 00:22
上一节分析了XposedApp,这一节继续分析WelcomeActivity。
WelcomeActivity继承自XposedBaseActivity,并实现了两个接口类:ModuleListener, RepoListener,主要用以接受一些通知。
XposedBaseActivity作为该项目的基础类,实现了一些样式风格的功能,代码不是很多,主要功能还是在ThemeUtil和NavUtil中,后面再分析。
WelcomeActivity界面:
布局设计确实一个TextView加一个ListView,其中框架、模块、下载、设置、日志、关于均为ListView的一个Item。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"android:layout_height="match_parent" android:orientation="vertical"android:padding="6dp" tools:context=".WelcomeActivity" > <TextViewandroid:layout_width="match_parent" android:layout_height="wrap_content"android:layout_marginBottom="8dp" android:gravity="center"android:text="@string/welcome" android:textSize="18sp" /> <ListViewandroid:id="@+id/welcome_list" android:layout_width="match_parent"android:layout_height="0dp" android:layout_weight="1" android:clipToPadding="false"android:divider="@null" android:dividerHeight="0dp" > </ListView> </LinearLayout>
class WelcomeItem { public final String title; public final String description;protected WelcomeItem(int titleResId, int descriptionResId) { this.title =getString(titleResId); this.description = getString(descriptionResId); } @Overridepublic String toString() { return title; } }
mAdapter = new WelcomeAdapter(this); // TODO add proper description texts and load them from resources, add icons, make it more fancy, ... mAdapter.add(newWelcomeItem(R.string.tabInstall, R.string.tabInstallDescription)); mAdapter.add(newWelcomeItem(R.string.tabModules, R.string.tabModulesDescription)); mAdapter.add(newWelcomeItem(R.string.tabDownload, R.string.tabDownloadDescription)); mAdapter.add(newWelcomeItem(R.string.tabSettings, R.string.tabSettingsDescription)); mAdapter.add(newWelcomeItem(R.string.tabLogs, R.string.tabLogsDescription)); mAdapter.add(newWelcomeItem(R.string.tabAbout, R.string.tabAboutDescription));
ListView lv = (ListView) findViewById(R.id.welcome_list); lv.setAdapter(mAdapter); lv.setOnItemClickListener(new OnItemClickListener() { @Override public voidonItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent= new Intent(WelcomeActivity.this, XposedInstallerActivity.class); intent.putExtra(XposedInstallerActivity.EXTRA_SECTION, position); intent.putExtra(NavUtil.FINISH_ON_UP_NAVIGATION, true); startActivity(intent); NavUtil.setTransitionSlideEnter(WelcomeActivity.this); } });
setTransitionSlideEnter作为一种进出效果,后面分析util功能的时候一并细述。
最后添加当前对象到监听列表里去,方便接受通知:
ModuleUtil.getInstance().addListener(this); mRepoLoader.addListener(this, false);
@Override public void onInstalledModulesReloaded(ModuleUtil moduleUtil) { notifyDataSetChanged(); } @Override public voidonSingleInstalledModuleReloaded(ModuleUtil moduleUtil, String packageName, InstalledModule module) { notifyDataSetChanged(); } @Override public voidonRepoReloaded(RepoLoader loader) { notifyDataSetChanged(); }
ListView的Item布局文件并不是一个标题对应一个描述那么简单,其实还隐藏了一些TextView,主要用于显示异常信息的,默认是GONE状态,一旦有异常出现就显示,例如本文开头的图片中的红色字体。
if (position == XposedInstallerActivity.TAB_INSTALL) { xposedActive = XposedApp.getActiveXposedVersion() >= InstallerFragment.getJarLatestVersion(); }
view.findViewById(R.id.txtXposedNotActive).setVisibility(!xposedActive ? View.VISIBLE : View.GONE);
0 0
- XPOSED源码研究之XposedInstaller(2)从manifest开始WelcomeActivity
- XPOSED源码研究之XposedInstaller(1)从manifest开始XposedApp
- XPOSED源码研究之XposedInstaller(3)XposedInstallerActivity
- XPOSED源码研究之XposedInstaller(4)InstallerFragment
- XPOSED源码研究之XposedInstaller(5)ModulesFragment
- XPOSED源码研究之XposedInstaller(6)DownloadFragment
- XPOSED源码研究之XposedInstaller(7)SettingsFragment
- XPOSED源码研究之简单介绍
- 解读(一):从manifest开始
- Android 研究之路从这里开始
- 从View开始研究FrameWork层的源码
- 开始研究tomacat源码
- 研究规划:从现在开始
- 从cvLoadImage开始--OpenCV源码阅读之三[转]
- Lua 源码分析之一切从这里开始
- Android源码之“应用程序界面“分析一( 从settings开始)
- Android清单文件详解(一) ---- 一切从<manifest>开始
- Android清单文件详解(一) ---- 一切从<manifest>开始
- PCIe SSD 加速MongoDB
- 查询耗费CPU最多的SQL语句
- quick cocos2d-x 与android实现更换头像
- iphone开发具备条件以及一些vim常见指令的意思
- Linux 下 自动删除N天前文件
- XPOSED源码研究之XposedInstaller(2)从manifest开始WelcomeActivity
- Redis介绍
- C#.NET WebApi返回各种类型(图片转二进制流或byte /json数据/字符串)
- [Elasticsearch] 聚合的测试数据 2
- LoaderManager使用详解(一)---没有Loader之前的世界
- JavaScript动态生成Form提交
- XPOSED源码研究之XposedInstaller(3)XposedInstallerActivity
- Highcharts选项配置详细说明文档
- JS----构造函数与原型prototype 区别