java后端开发学习android之路一(QMUI_Androi

2019-10-10  本文已影响0人  front_ui

前提

熟悉java语言的基础知识,了解常见的设计模式

安卓基础知识

建议看这个文档的第一章就够了,google出的安卓教程,了解activity、fragment和布局文件。
官方文档翻译

源码学习阶段

界面UI

建议直接学习QMUI_Android的源码的demo
QMUI_Android
直接在android studio里学习打开项目,找到AndroidManifest.xml这个文件,这个文件是整个项目的入口,里面定义了那个Activity是起始页面。关键代码如下:

 <application
        android:name=".QDApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:networkSecurityConfig="@xml/network_security_config"
        android:theme="@style/AppTheme"
        tools:ignore="AllowBackup,GoogleAppIndexingWarning"
        tools:targetApi="n">

        <activity
            android:name=".QDMainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:windowSoftInputMode="stateAlwaysHidden|adjustResize"/>
        <activity
            android:name=".activity.LauncherActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

QDApplication 集成了Android的基础类android.app.Application类, 定义了Application的入口,也是QMUI初始化的地方
这个demo的入口是LauncherActivity,但是这个activity启动后就直接跳到QDMainActivity,所以开始先忽略它,直接看QDMainActivity

@FirstFragments(
        value = {
                HomeFragment.class,
                QDArchTestFragment.class,
                QDArchSurfaceTestFragment.class,
                QDNotchHelperFragment.class,
                QDWebExplorerFragment.class,
                QDContinuousNestedScroll1Fragment.class
        })
@DefaultFirstFragment(HomeFragment.class)
@LatestVisitRecord
public class QDMainActivity extends BaseFragmentActivity {

    @Override
    protected int getContextViewId() {
        return R.id.qmuidemo;
    }


    public static Intent createWebExplorerIntent(Context context, String url, String title) {
        Bundle bundle = new Bundle();
        bundle.putString(EXTRA_URL, url);
        bundle.putString(EXTRA_TITLE, title);
        return of(context, QDWebExplorerFragment.class, bundle);
    }

    public static Intent of(@NonNull Context context,
                            @NonNull Class<? extends QMUIFragment> firstFragment) {
        return QMUIFragmentActivity.intentOf(context, QDMainActivity.class, firstFragment);
    }

    public static Intent of(@NonNull Context context,
                            @NonNull Class<? extends QMUIFragment> firstFragment,
                            @Nullable Bundle fragmentArgs) {
        return QMUIFragmentActivity.intentOf(context, QDMainActivity.class, firstFragment, fragmentArgs);
    }
}

这样一看很难懂,其实关键就是上面那行注解,我找到了不用注解的版本,更容易理解

ublic class MainActivity extends QMUIFragmentActivity {


    @Override
    protected int getContextViewId() {
        return R.id.demo;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
            BaseFragment fragment = new HomeFragment();

            getSupportFragmentManager()
                    .beginTransaction()
                    .add(getContextViewId(), fragment, fragment.getClass().getSimpleName())
                    .addToBackStack(fragment.getClass().getSimpleName())
                    .commit();
        }
    }

}

这样就清晰多了,这个activity其实也没干啥,就是把HomeFragment加载了进来,HomeFragmen就是你允许demo的主界面了。未完待续

上一篇下一篇

猜你喜欢

热点阅读