规范首页实现

This commit is contained in:
BA7LZD 2020-05-18 23:53:24 +08:00
parent f3f76711cd
commit 2d4e77a43e
19 changed files with 370 additions and 130 deletions

View File

@ -33,19 +33,17 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'androidx.navigation:navigation-fragment:2.0.0'
implementation 'androidx.navigation:navigation-ui:2.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
//aar包
implementation 'com.squareup.retrofit2:retrofit:2.7.1'
implementation 'com.squareup.okhttp:okhttp:2.7.5'
implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'com.shuyu:GSYVideoPlayer:7.1.3'
//
//
@ -53,6 +51,8 @@ dependencies {
// fragment快速实现
implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0'
//
implementation 'com.google.android.material:material:1.1.0'
//
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

View File

@ -9,23 +9,21 @@
<application
android:name=".comm.SDUApp"
android:allowBackup="false"
tools:replace="android:allowBackup"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:maxAspectRatio="2.4"
android:resizeableActivity="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="UnusedAttribute">
tools:ignore="UnusedAttribute"
tools:replace="android:allowBackup">
<meta-data
android:name="android.max_aspect"
android:value="2.4" />
<!--适配华为刘海屏-->
android:value="2.4" /> <!-- 适配华为刘海屏 -->
<meta-data
android:name="android.notch_support"
android:value="true" />
<!--适配小米刘海屏-->
android:value="true" /> <!-- 适配小米刘海屏 -->
<meta-data
android:name="notch.config"
android:value="portrait|landscape" />

View File

@ -1,52 +1,23 @@
package com.yuxihan.sdu;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.gyf.immersionbar.ImmersionBar;
import com.yuxihan.sdu.comm.BaseActivity;
import com.yuxihan.sdu.gsv.SimpleDetailActivityMode2;
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImmersionBar.with(this).titleBar(R.id.toolbar)
.navigationBarColor(R.color.shape1)
.init();
findViewById(R.id.start_local_video).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, SimpleDetailActivityMode2.class));
}
});
//设置导航栏菜单项Item选中监听
((BottomNavigationView) findViewById(R.id.bottomNavigationView))
.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
String title = item.getTitle().toString();
switch (item.getItemId()) {
case R.id.item_bottom_1:
Toast.makeText(getApplicationContext(), "Item1", Toast.LENGTH_SHORT).show();
break;
case R.id.item_bottom_2:
Toast.makeText(getApplicationContext(), "Item2", Toast.LENGTH_SHORT).show();
break;
case R.id.item_bottom_3:
Toast.makeText(getApplicationContext(), "Item3", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
}
}
package com.yuxihan.sdu;
import android.os.Bundle;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.yuxihan.sdu.comm.BaseActivity;
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView navView = findViewById(R.id.nav_view);
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupWithNavController(navView, navController);
}
}

View File

@ -0,0 +1,12 @@
package com.yuxihan.sdu.comm;
import com.gyf.immersionbar.ImmersionBar;
import com.gyf.immersionbar.components.SimpleImmersionFragment;
public class BaseFragment extends SimpleImmersionFragment {
@Override
public void initImmersionBar() {
ImmersionBar.with(this).keyboardEnable(true).init();
}
}

View File

@ -0,0 +1,35 @@
package com.yuxihan.sdu.ui.account;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.yuxihan.sdu.R;
import com.yuxihan.sdu.comm.BaseFragment;
public class AccountFragment extends BaseFragment {
private AccountViewModel accountViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
accountViewModel =
ViewModelProviders.of(this).get(AccountViewModel.class);
View root = inflater.inflate(R.layout.fragment_account, container, false);
final TextView textView = root.findViewById(R.id.text_notifications);
accountViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
}

View File

@ -0,0 +1,19 @@
package com.yuxihan.sdu.ui.account;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class AccountViewModel extends ViewModel {
private MutableLiveData<String> mText;
public AccountViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is notifications fragment");
}
public LiveData<String> getText() {
return mText;
}
}

View File

@ -0,0 +1,47 @@
package com.yuxihan.sdu.ui.grow;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.yuxihan.sdu.R;
import com.yuxihan.sdu.comm.BaseFragment;
import com.yuxihan.sdu.gsv.SimpleDetailActivityMode2;
public class GrowFragment extends BaseFragment {
private GrowModel growModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
growModel =
ViewModelProviders.of(this).get(GrowModel.class);
View root = inflater.inflate(R.layout.fragment_grow, container, false);
final TextView textView = root.findViewById(R.id.text_home);
growModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
initView(root);
return root;
}
private void initView(View root) {
root.findViewById(R.id.text_home).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getContext(), SimpleDetailActivityMode2.class));
}
});
}
}

View File

@ -0,0 +1,19 @@
package com.yuxihan.sdu.ui.grow;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class GrowModel extends ViewModel {
private MutableLiveData<String> mText;
public GrowModel() {
mText = new MutableLiveData<>();
mText.setValue("This is home fragment");
}
public LiveData<String> getText() {
return mText;
}
}

View File

@ -0,0 +1,35 @@
package com.yuxihan.sdu.ui.vaccine;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.yuxihan.sdu.R;
import com.yuxihan.sdu.comm.BaseFragment;
public class VaccineFragment extends BaseFragment {
private VaccineViewModel vaccineViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
vaccineViewModel =
ViewModelProviders.of(this).get(VaccineViewModel.class);
View root = inflater.inflate(R.layout.fragment_vaccine, container, false);
final TextView textView = root.findViewById(R.id.text_dashboard);
vaccineViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
}

View File

@ -0,0 +1,19 @@
package com.yuxihan.sdu.ui.vaccine;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class VaccineViewModel extends ViewModel {
private MutableLiveData<String> mText;
public VaccineViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is dashboard fragment");
}
public LiveData<String> getText() {
return mText;
}
}

View File

@ -1,39 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#AAAAFA"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar
app:layout_constraintTop_toTopOf="parent"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="@drawable/shape"
app:title="雨曦成长记录系统"
app:titleTextColor="@android:color/white" />
<TextView
android:id="@+id/start_local_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/yuxi"
android:textSize="40sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
app:layout_constraintBottom_toBottomOf="parent"
app:labelVisibilityMode="labeled"
android:layout_width="match_parent"
android:layout_height="46dp"
android:id="@+id/bottomNavigationView"
app:itemBackground="@color/white_bg"
app:itemIconTint="@color/bottom_container_bg"
app:itemTextColor="@color/bottom_container_bg"
app:menu="@menu/menu_bottom_navigation_view" />
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.account.AccountFragment">
<TextView
android:id="@+id/text_notifications"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.grow.GrowFragment">
<TextView
android:id="@+id/text_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.vaccine.VaccineFragment">
<TextView
android:id="@+id/text_dashboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,19 @@
<?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_grow"
android:title="@string/grow_record" />
<item
android:id="@+id/navigation_dashboard"
android:icon="@drawable/ic_vaccine"
android:title="@string/vaccine_plan"/>
<item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_account"
android:title="@string/account_info" />
</menu>

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item_bottom_1"
android:enabled="true"
android:icon="@drawable/ic_grow_record"
android:title="@string/grow_record"
app:showAsAction="ifRoom" />
<item
android:id="@+id/item_bottom_2"
android:enabled="true"
android:icon="@drawable/ic_vaccine"
android:title="@string/vaccine_plan"
app:showAsAction="ifRoom" />
<item
android:id="@+id/item_bottom_3"
android:enabled="true"
android:icon="@drawable/ic_account"
android:title="@string/account_info"
app:showAsAction="ifRoom" />
</menu>

View File

@ -0,0 +1,25 @@
<?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.yuxihan.sdu.ui.grow.GrowFragment"
android:label="@string/title_home"
tools:layout="@layout/fragment_grow" />
<fragment
android:id="@+id/navigation_dashboard"
android:name="com.yuxihan.sdu.ui.vaccine.VaccineFragment"
android:label="@string/title_dashboard"
tools:layout="@layout/fragment_vaccine" />
<fragment
android:id="@+id/navigation_notifications"
android:name="com.yuxihan.sdu.ui.account.AccountFragment"
android:label="@string/title_notifications"
tools:layout="@layout/fragment_account" />
</navigation>

View File

@ -11,7 +11,11 @@
<string name="login_failed">"登录失败"</string>
<string name="detail_text">简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介</string>
<string name="yuxi">雨曦</string>
<string name="grow_record">成长记录</string>
<string name="account_info">账号信息</string>
<string name="vaccine_plan">疫苗计划</string>
<string name="grow_record">成长</string>
<string name="account_info">账号</string>
<string name="vaccine_plan">疫苗</string>
<string name="title_activity_main2">Main2Activity</string>
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_notifications">Notifications</string>
</resources>