[安卓] JSON仲机器人 – 部分 3: 接口设计的旧情人

大家好, 在 2 幸运的是,我们有 tìm hiểu JSon 如何 xuất JSon từ Database bằng Php, 一切都很好. 并且部分 3 这项, chúng ta sẽ đi thiết kế giao diện cho Old Lover – 昔日的恋人. 😉

Ứng dụng được thực hiện trên Android studio 1.3
compileSdkVersion 22
buildToolsVersion “22.0.1”
的minSdkVersion 14
targetSdkVersion 22

让我们来看看旧情人的视频可视化界面的应用程序.

配置和必需品

首先,我们将做些准备build.gradle, 串, 绘制, 颜色, 风格,… 当然,在做的过程中是使自己更下降到无处,但是当批示,我给你所有的提前,以避免故障或难以操作.

配置build.gradle和AndroidManifest

文件build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "cachhoc.net.demojson"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:design:22.2.0'
    compile 'com.android.support:recyclerview-v7:22.0.+'
    compile 'com.android.support:cardview-v7:22.0.+'
    compile 'com.loopj.android:android-async-http:1.4.8'
    compile 'com.wdullaer:materialdatetimepicker:1.4.2'
}

通知你已经采取了一些库,比如

文件的Andr​​oidManifest.xml

在最重要的,这是我们授予访问互联网的应用.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cachhoc.net.demojson" >

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/old_lover"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".LoginActivity"
            android:label="@string/old_lover"
            android:windowSoftInputMode="adjustPan" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:label="@string/old_lover" />
        <activity
            android:name=".RegisterActivity"
            android:label="@string/title_activity_register" >
        </activity>
        <activity
            android:name=".AddLoverActivity"
            android:label="@string/title_activity_add_lover" >
        </activity>
    </application>

</manifest>

肤色, 串, 作风

文件RES /价值/ color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!--Indigo 500-->
    <color name="primary">#3F51B5</color>
    <!--Indigo 700-->
    <color name="primary_dark">#303F9F</color>
    <!--Pink 500-->
    <color name="accent">#E91E63</color>
    <color name="white">#FFFFFF</color>

    <!-- for change color date picker-->
    <color name="mdtp_accent_color">@color/primary</color>
    <color name="mdtp_accent_color_dark">@color/primary_dark</color>

</resources>

文件RES /价值/ string.xml

他之所以能在string.xml没有Java代码,因为它提供了更高创建多语言应用程序向用户显示的字符串.

<resources>
    <string name="app_name">DemoJson</string>

    <string name="refresh">Refresh</string>
    <string name="name">Name Lover</string>
    <string name="phone">Phone</string>
    <string name="begin_date">Begin date</string>
    <string name="end_date">End date</string>

    <string name="nick_name">Nick name</string>
    <string name="password">Password</string>
    <string name="re_password">Re Password</string>

    <string name="logout">Logout</string>
    <string name="login">Login</string>
    <string name="remember_me">Remember me</string>
    <string name="login_success">Login success</string>
    <string name="login_fail">Login fail</string>

    <string name="register">Register</string>
    <string name="reset">Reset</string>
    <string name="register_success">Register success</string>
    <string name="register_fail">Nick already exists</string>

    <string name="add_success">Add success</string>
    <string name="add_fail">Add fail</string>

    <string name="wait">Please wait…</string>
    <string name="add">Add</string>
    <string name="no_lover">You not have old lover</string>
    <string name="back_to_exit">Please click BACK again to exit</string>

    <string name="enter_nick">Please enter your nick name</string>
    <string name="enter_pass">Please enter your password</string>
    <string name="enter_repass">Please re enter your password</string>
    <string name="pass_not_match">Password not match</string>

    <string name="old_lover">Old Lover</string>
    <string name="title_activity_login">Login</string>
    <string name="title_activity_register">Register</string>
    <string name="title_activity_add_lover">Add Old Lover</string>
</resources>

文件RES /价值/ style.xml

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="windowActionBar">false</item>
        <item name="windowActionBarOverlay">true</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@color/background_material_light</item>
    </style>

    <style name="MyAppDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
    </style>

</resources>

图标

您可以创建使用图标 AndroidAssetStudio 或者你可以下载你的图标集 这里.

做完必需品.

活动的接口设计

正如你所看到的, 我们将有 4 主要活动: 登录 (注册), 注册 (注册), 列表旧情人 (名单前男友) 最后 (加) 更多新.

欲了解更多活动您在一个单一的解决方案做的就是右键单击java包布局的文件夹,或选择新 - >活动 - >黑活动. 同时,XML文件格式, Java和清单都.

在RES /布局文件
res old lover

工具栏,而不是动作条

你有没有在上面的文件style.xml发现, 我已经设置了主题为 Theme.AppCompat.Light.NoActionBar 这样的活性不会有动作条. 相反,我会用工具栏中的包 android.support.v7.widget 服务接口设计材料.

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

活动登录

<RelativeLayout 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">

    <include layout="@layout/toolbar" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_below="@+id/toolbar"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center"
        android:src="@drawable/ic_launch" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/imageView"
        android:orientation="vertical"
        android:padding="10dp">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edit_nick"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/nick_name"
                android:textColor="@color/accent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edit_pass"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"
                android:textColor="@color/accent" />
        </android.support.design.widget.TextInputLayout>

        <CheckBox
            android:id="@+id/cb_remember"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/remember_me" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="10dp">

            <Button
                android:id="@+id/btn_login"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/login" />

            <Button
                android:id="@+id/btn_register"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/register" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

你注意到我用 的EditTextandroid.support.design.widget.TextInputLayout, 这将帮助我们创建和后肢后的EditText会在自动运行起来 1 吊牌当它是forcus在视频.

活动注册

<RelativeLayout 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">

    <include layout="@layout/toolbar" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_below="@+id/toolbar"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center"
        android:src="@drawable/ic_launch" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/imageView"
        android:orientation="vertical"
        android:padding="10dp">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edit_nick"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/nick_name"
                android:textColor="@color/accent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edit_pass"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"
                android:textColor="@color/accent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edit_re_pass"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/re_password"
                android:inputType="textPassword"
                android:textColor="@color/accent" />
        </android.support.design.widget.TextInputLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_register"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/register" />

            <Button
                android:id="@+id/btn_reset"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/reset" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

活动添加情人

<RelativeLayout 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">

    <include layout="@layout/toolbar" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/toolbar"
        android:orientation="vertical"
        android:padding="10dp">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edit_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/name"
                android:textColor="@color/accent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/edit_phone"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/phone"
                android:textColor="@color/accent" />
        </android.support.design.widget.TextInputLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_begin_date"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/begin_date" />

            <Button
                android:id="@+id/btn_end_date"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/end_date" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_add"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/add" />

            <Button
                android:id="@+id/btn_reset"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:foreground="?android:attr/selectableItemBackground"
                android:text="@string/reset" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

活动主 – 列表旧情人

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <include layout="@layout/toolbar" />

    <LinearLayout
        android:id="@+id/layout_progress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:gravity="center"
        android:orientation="vertical">

        <ProgressBar
            android:id="@+id/progress"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/tv_notify"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_lover"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/layout_progress"
        android:scrollbars="vertical" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_gravity="center"
        android:layout_marginBottom="16dp"
        android:layout_marginRight="16dp"
        android:src="@drawable/ic_add"
        app:borderWidth="0dp"
        app:elevation="6dp"
        app:pressedTranslationZ="12dp" />

</RelativeLayout>

在此活动中,我们有 1 布局Là layout_progress, 它包含 1 进度条显示 “盘曲” 从网络加载数据时, 1 TextView的错误,如果错误信息. 数据加载完成后,, 否则会被隐藏故障.

此外,在这种活动,我们所需要的 项目 为RecyclerView和 2 菜单 logut刷新

文件RES /布局/ item.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/item_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="5dp"
    android:foreground="?android:attr/selectableItemBackground"
    android:orientation="vertical"
    card_view:cardCornerRadius="2dp"
    card_view:cardElevation="@dimen/cardview_default_elevation">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="?attr/listPreferredItemHeight"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:paddingBottom="8dp"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="8dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tv_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toLeftOf="@+id/tv_begin_date"
                android:text="@string/name"
                android:textColor="@color/primary_text_default_material_light"
                android:textSize="@dimen/abc_text_size_subhead_material" />

            <TextView
                android:id="@+id/tv_begin_date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:paddingTop="3dp"
                android:text="@string/begin_date"
                android:textColor="@color/secondary_text_default_material_light"
                android:textSize="@dimen/abc_text_size_caption_material" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tv_phone"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toLeftOf="@+id/tv_end_date"
                android:paddingTop="3dp"
                android:text="@string/phone"
                android:textColor="@color/secondary_text_default_material_light"
                android:textSize="@dimen/abc_text_size_caption_material" />

            <TextView
                android:id="@+id/tv_end_date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:paddingTop="3dp"
                android:text="@string/end_date"
                android:textColor="@color/secondary_text_default_material_light"
                android:textSize="@dimen/abc_text_size_caption_material" />
        </RelativeLayout>
    </LinearLayout>

</android.support.v7.widget.CardView>

文件RES /菜单/ menu_main.xml

<menu 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"
    tools:context=".MainActivity">

    <item
        android:id="@+id/action_logout"
        android:icon="@drawable/ic_logout"
        android:orderInCategory="100"
        android:title="@string/logout"
        app:showAsAction="always" />

    <item
        android:id="@+id/action_refresh"
        android:icon="@drawable/ic_refresh"
        android:orderInCategory="100"
        android:title="@string/refresh"
        app:showAsAction="always" />

</menu>

因此,在界面设计完成. 在接下来的章节中,我们会处理完整的Java应用程序代码.

在本教程的帖子 JSON仲机器人nguyenvanquan7826