我们开发安卓TV或者投影仪一般使用都是TvSettings
源码目录:packages\apps\TvSettings\Settings
首先我们找到AndroidManifest.xml文件查看settings主入口
此时可以am start -n com.android.tv.settings/com.android.tv.settings.MainSettings打开settings主界面
根据代码打开MainSettings.java
MainSettings继承TvSettingsActivity,打开TvSettingsActivity.java
TvSettingsActivity.java里面有个抽象方法
protected abstract Fragment createSettingsFragment();
onCreate方法里面加载想要的Fragment
final Fragment fragment = createSettingsFragment();
if (fragment != null) {
getFragmentManager().beginTransaction()
.add(android.R.id.content, fragment, SETTINGS_FRAGMENT_TAG).commitNow();
}
这里面有个侧滑效果,可以根据自己想要的效果修改
final Slide slide = new Slide(Gravity.END);
注意:Setting里面引用的dimen如果在setting源码里面找不到可以去
support/leanback-preference/src/main/res/values/dimens.xml找,因为,setting引用了它
我们来到MainSettings.java,里面代码很简单
@Override
protected Fragment createSettingsFragment() {
return SettingsFragment.newInstance();
}
public static class SettingsFragment extends BaseSettingsFragment {
public static SettingsFragment newInstance() {
return new SettingsFragment();
}
@Override
public void onPreferenceStartInitialScreen() {
final MainFragment fragment = MainFragment.newInstance();
startPreferenceFragment(fragment);
}
}
就是重写createSettingsFragment()方法加载Fragment
SettingsFragment 继承BaseSettingsFragment 并重写onPreferenceStartInitialScreen()
我们打开BaseSettingsFragment .java
注意类名上的注释
Base class for settings fragments. Handles launching fragments and dialogs in a reasonably
generic way. Subclasses should only override onPreferenceStartInitialScreen.
子类仅仅需要重写onPreferenceStartInitialScreen()即可
SettingsFragment /onPreferenceStartInitialScreen()里面加载MainFragment
final MainFragment fragment = MainFragment.newInstance();
这时候就到了主界面