feat: 首页导航图

无法切换页面
This commit is contained in:
niushuai233 2022-10-13 14:15:34 +08:00
parent af421e7615
commit 743bc55720
15 changed files with 373 additions and 7 deletions

View File

@ -1,14 +1,65 @@
package cc.niushuai.project.devcontrol;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import android.os.Bundle;
import android.view.Menu;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import cc.niushuai.project.devcontrol.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding activityMainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(activityMainBinding.getRoot());
// 设置底部导航栏
setBottomNavigationView();
}
/**
* 设置底部导航栏
*
* @author niushuai
* @date: 2022/10/13 10:42
*/
private void setBottomNavigationView() {
// 导航栏控制器 获取navController的方式不同
// 方式一
NavController navController = Navigation.findNavController(this, R.id.main_nav_host_fragment_activity);
// 方式二
// NavHostFragment fragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.main_nav_host_fragment_activity);
// NavController navController = fragment.getNavController();
// 顶部页签 右上角展开设置项
// AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
// // 设备页签
// R.id.id_bottom_nav_menu_device,
// // 日志页签
// R.id.id_bottom_nav_menu_log,
// // 设置页签
// R.id.id_bottom_nav_menu_set
// ).build();
// NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
// 底部导航栏
BottomNavigationView bottomNavView = this.findViewById(R.id.bottom_nav_view);
// 底部栏显示
NavigationUI.setupWithNavController(activityMainBinding.bottomNavView, navController);
}
}

View File

@ -0,0 +1,45 @@
package cc.niushuai.project.devcontrol.ui.nav.main.device;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import cc.niushuai.project.devcontrol.databinding.MainNavFragmentDeviceBinding;
/**
* 设备页面ui
*
* @author niushuai
* @date: 2022/10/13 10:58
*/
public class NavDeviceFragment extends Fragment {
private MainNavFragmentDeviceBinding navFragmentDeviceBinding;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
navFragmentDeviceBinding = MainNavFragmentDeviceBinding.inflate(inflater, container, false);
NavDeviceViewModel navDeviceViewModel = new ViewModelProvider(this).get(NavDeviceViewModel.class);
View rootView = navFragmentDeviceBinding.getRoot();
TextView textView = navFragmentDeviceBinding.navDeviceFragmentTextview;
navDeviceViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
navFragmentDeviceBinding = null;
}
}

View File

@ -0,0 +1,18 @@
package cc.niushuai.project.devcontrol.ui.nav.main.device;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class NavDeviceViewModel extends ViewModel {
private final MutableLiveData<String> vText;
public NavDeviceViewModel() {
this.vText = new MutableLiveData<>();
this.vText.setValue("this is device view");
}
public MutableLiveData<String> getText() {
return this.vText;
}
}

View File

@ -0,0 +1,41 @@
package cc.niushuai.project.devcontrol.ui.nav.main.log;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import cc.niushuai.project.devcontrol.databinding.MainNavFragmentLogBinding;
public class NavLogFragment extends Fragment {
private MainNavFragmentLogBinding navFragmentLogBinding;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
navFragmentLogBinding = MainNavFragmentLogBinding.inflate(inflater, container, false);
NavLogViewModel navLogViewModel = new ViewModelProvider(this).get(NavLogViewModel.class);
View rootView = navFragmentLogBinding.getRoot();
TextView textView = navFragmentLogBinding.navLogFragmentTextview;
navLogViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
navFragmentLogBinding = null;
}
}

View File

@ -0,0 +1,18 @@
package cc.niushuai.project.devcontrol.ui.nav.main.log;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class NavLogViewModel extends ViewModel {
private final MutableLiveData<String> vText;
public NavLogViewModel() {
this.vText = new MutableLiveData<>();
this.vText.setValue("this is log view");
}
public MutableLiveData<String> getText() {
return this.vText;
}
}

View File

@ -0,0 +1,40 @@
package cc.niushuai.project.devcontrol.ui.nav.main.setup;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import cc.niushuai.project.devcontrol.databinding.MainNavFragmentSetUpBinding;
public class NavSetUpFragment extends Fragment {
private MainNavFragmentSetUpBinding navFragmentSetUpBinding;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
navFragmentSetUpBinding = MainNavFragmentSetUpBinding.inflate(inflater, container, false);
NavSetUpViewModel navSetUpViewModel = new ViewModelProvider(this).get(NavSetUpViewModel.class);
View rootView = navFragmentSetUpBinding.getRoot();
TextView textView = navFragmentSetUpBinding.navSetupFragmentTextview;
navSetUpViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
navFragmentSetUpBinding = null;
}
}

View File

@ -0,0 +1,18 @@
package cc.niushuai.project.devcontrol.ui.nav.main.setup;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class NavSetUpViewModel extends ViewModel {
private final MutableLiveData<String> vText;
public NavSetUpViewModel() {
this.vText = new MutableLiveData<>();
this.vText.setValue("this is setup view");
}
public MutableLiveData<String> getText() {
return this.vText;
}
}

View File

@ -1,18 +1,35 @@
<?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:id="@+id/id_am_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
android:paddingTop="?attr/actionBarSize">
<TextView
android:layout_width="wrap_content"
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Hello World!"
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:layout_constraintTop_toTopOf="parent" />
app:menu="@menu/main_nav_menu" />
<fragment
android:id="@+id/main_nav_host_fragment_activity"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_view"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0"
app:navGraph="@navigation/main_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.nav.main.device.NavDeviceFragment">
<TextView
android:id="@+id/nav_device_fragment_textview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAlignment="center"
android:text="@string/hello_blank_fragment"
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,20 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.nav.main.log.NavLogFragment">
<TextView
android:id="@+id/nav_log_fragment_textview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAlignment="center"
android:text="@string/hello_blank_fragment"
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,20 @@
<?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.nav.main.setup.NavSetUpFragment">
<TextView
android:id="@+id/nav_setup_fragment_textview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment"
android:textAlignment="center"
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/id_bottom_nav_menu_device"
android:icon="@drawable/ic_home"
android:title="@string/title_bottom_nav_menu_device" />
<item
android:id="@+id/id_bottom_nav_menu_log"
android:icon="@drawable/ic_log"
android:title="@string/title_bottom_nav_menu_log" />
<item
android:id="@+id/id_bottom_nav_menu_set"
android:icon="@drawable/ic_dashboard"
android:title="@string/title_bottom_nav_menu_set" />
</menu>

View File

@ -0,0 +1,23 @@
<?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/main_navigation"
app:startDestination="@id/navDeviceFragment">
<fragment
android:id="@+id/navDeviceFragment"
android:name="cc.niushuai.project.devcontrol.ui.nav.main.device.NavDeviceFragment"
android:label="@string/title_bottom_nav_menu_device"
tools:layout="@layout/main_nav_fragment_device" />
<fragment
android:id="@+id/navLogFragment"
android:name="cc.niushuai.project.devcontrol.ui.nav.main.log.NavLogFragment"
android:label="@string/title_bottom_nav_menu_log"
tools:layout="@layout/main_nav_fragment_log" />
<fragment
android:id="@+id/navSetUpFragment"
android:name="cc.niushuai.project.devcontrol.ui.nav.main.setup.NavSetUpFragment"
android:label="@string/title_bottom_nav_menu_set"
tools:layout="@layout/main_nav_fragment_set_up" />
</navigation>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 首页 底部导航栏 start-->
<item name="id_bottom_nav_menu_device" type="id"/>
<item name="id_bottom_nav_menu_log" type="id"/>
<item name="id_bottom_nav_menu_set" type="id"/>
<!-- 首页 底部导航栏 end-->
</resources>

View File

@ -1,3 +1,10 @@
<resources>
<string name="app_name">DevControl</string>
<!-- 首页 底部导航栏 start-->
<string name="title_bottom_nav_menu_device">设备</string>
<string name="title_bottom_nav_menu_log">日志</string>
<string name="title_bottom_nav_menu_set">设置</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<!-- 首页 底部导航栏 end-->
</resources>