因为某些原因,打算学习安卓开发,记录一下每一步。

Bottom Navigation Activity

首先开发工具是as3,新建一个bottom navigation activity,因为底部导航栏是比较常用的嘛,这里就直接建一个项目。

文件结构

androidmainfest.xml

这个是android的主配置文件,采用XML描述语言。
AndroidManifest.xml配置文件的根元素,必须包含一个元素并且指定xlmns:android和package属性。xlmns:android指定了Android的命名空间,默认情况下是“http://schemas.android.com/apk/res/android”;而package是标准的应用包名,也是一个应用进程的默认名称。
android:versionCode是给设备程序识别版本用的,必须是一个整数值代表app更新过多少次;而android:versionName则是给用户查看版本用的,需要具备一定的可读性,比如“1.0.0”这样的。
下面是一份官方的AndroidManifest.xml,格式是这样,具体解析就不赘述了。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.sample.teapot"
          android:versionCode="1"
          android:versionName="1.0.0.1" >

  <uses-feature android:glEsVersion="0x00020000"></uses-feature>

  <application
      android:allowBackup="false"
      android:fullBackupContent="false"
      android:supportsRtl="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme"
      android:name="com.sample.teapot.TeapotApplication"
      >

    <!-- Our activity is the built-in NativeActivity framework class.
         This will take care of integrating with our NDK code. -->
    <activity android:name="com.sample.teapot.TeapotNativeActivity"
              android:label="@string/app_name"
              android:configChanges="orientation|keyboardHidden">
      <!-- Tell NativeActivity the name of our .so -->
      <meta-data android:name="android.app.lib_name"
                 android:value="TeapotNativeActivity" />
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>

java

java文件夹里有dashboard,home,notifications三个文件夹和一个MainActivity.三个文件夹分别是对应的底部三个导航栏。每个文件夹下有两个文件,一个是用来承载控件的fragment,另一个是与之对应的viewModel。fragment用来显示ui界面,而viewmodel则是给ui界面提供数据,view里的每一个控件在viewmodel里都有一个对应的数据对象,如果要更新view上的ui界面,只需要更新viewmodel里与之对应的对象即可。

res

menu文件夹下的bottom_nav_menu.xml操控底部导航栏图标。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/navigation_home"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/title_home" />

    <item
        android:id="@+id/navigation_dashboard"
        android:icon="@drawable/ic_dashboard_black_24dp"
        android:title="@string/title_dashboard" />

    <item
        android:id="@+id/navigation_notifications"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:title="@string/title_notifications" />

    <item
        android:id="@+id/navigation_me"
        android:icon="@drawable/ic_notifications_black_24dp"
        android:title="@string/title_me" />
</menu>

这里我可以自定义一个底部item,这里的@string/title_home是在res->values->strings.xml里定义。然后在java->ui文件夹下新建一个me的Package,在Package里右键new->Fragment->Fragment(with ViewMoudle)。
然后修改MainActivity里的代码。

AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications,R.id.navigation_me)
                .build();

layout

layout下是每一个的布局文件。

相应修改此处的mobile_navigation.xml.

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mobile_navigation"
    app:startDestination="@+id/navigation_home"> //默认启动页

    <fragment
        android:id="@+id/navigation_home"
        android:name="com.chenxiyuan.youbang.ui.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/navigation_dashboard"
        android:name="com.chenxiyuan.youbang.ui.dashboard.DashboardFragment"
        android:label="@string/title_dashboard"
        tools:layout="@layout/fragment_dashboard" />

    <fragment
        android:id="@+id/navigation_notifications"
        android:name="com.chenxiyuan.youbang.ui.notifications.NotificationsFragment"
        android:label="@string/title_notifications"
        tools:layout="@layout/fragment_notifications" />
    <fragment
        android:id="@+id/navigation_me"
        android:name="com.chenxiyuan.youbang.ui.me.MeFragment"
        android:label="@string/title_me"
        tools:layout="@layout/me_fragment" />
</navigation>

webview组件

先简单用一下webview组件。
在mainfest里添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

在layout里对应的布局文件里,Palette->Widgets->Webview,添加组件。

<WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

这里我直接在HomeFragment里调用webview.

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        homeViewModel =
                ViewModelProviders.of(this).get(HomeViewModel.class);
        View root = inflater.inflate(R.layout.fragment_home, container, false);

        WebView myWebView = (WebView) root.findViewById(R.id.webview);

        myWebView.loadUrl("http://www.baidu.com");

        return root;
    }
}

刚开始报错,在网上搜了一下,解决方法是在manifest中application节点添加:

android:usesCleartextTraffic="true"

然后运行虚拟机,成功访问网页。



安卓开发      android

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!