app/build.gradle
@@ -42,4 +42,7 @@ testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' //// 注意:分包之后不会有默认的Header和Footer需要手动添加!还是原来的三种方法! implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1' //核心必须依赖 implementation 'com.scwang.smart:refresh-header-classics:2.0.1' //经典刷新头 } app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java
@@ -4,12 +4,18 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.duqing.missions.R; import com.duqing.missions.databinding.FragmentHomeBinding; @@ -18,15 +24,22 @@ private HomeViewModel homeViewModel; private FragmentHomeBinding binding; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); binding = FragmentHomeBinding.inflate(inflater, container, false); View root = binding.getRoot(); final TextView textView = binding.textRecommend; final ImageView imgSearch = binding.imgSearch; RecyclerView recyclerClassify = binding.recyclerClassify; RecyclerView recyclerTop = binding.recyclerTop; final RecyclerView recyclerRecommend = binding.recyclerRecommend; recyclerRecommend.setLayoutManager(new LinearLayoutManager(getContext())); LinearLayoutManager layoutManager = new LinearLayoutManager(getContext()); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); recyclerClassify.setLayoutManager(layoutManager); recyclerTop.setLayoutManager(new GridLayoutManager(getContext(),3)); final TextView textView = binding.textHome; homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() { @Override public void onChanged(@Nullable String s) { app/src/main/res/drawable/bg_border_gray_corner.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <stroke android:width="2dp" android:color="@color/gray" /> <corners android:radius="@dimen/radios"/> </shape> </item> </selector> app/src/main/res/drawable/bg_border_red_corner.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <stroke android:width="2dp" android:color="@color/red" /> <corners android:radius="@dimen/small_radios"/> </shape> </item> </selector> app/src/main/res/drawable/bg_border_slender_red_corner.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <stroke android:width="0.5dp" android:color="@color/red" /> <corners android:radius="@dimen/small_radios"/> </shape> </item> </selector> app/src/main/res/drawable/bg_red_corner.xml
New file @@ -0,0 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/red" /> <corners android:radius="@dimen/small_radios"/> </shape> </item> </selector> app/src/main/res/layout/fragment_home.xml
@@ -1,23 +1,72 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout <LinearLayout 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:ignore="MissingConstraints" tools:context=".ui.home.HomeFragment" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <ImageView android:id="@+id/img_search" android:layout_width="39dp" android:layout_height="35dp" android:src="@android:drawable/ic_search_category_default"/> <androidx.core.widget.NestedScrollView android:id="@+id/smart_refresh" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.home.HomeFragment" > > <TextView android:id="@+id/text_home" <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" > <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_top" 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_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" tools:itemCount="3" tools:listitem="@layout/home_item_top" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_classify" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" tools:listitem="@layout/home_item_classify" app:layout_constraintTop_toBottomOf="@id/recycler_top" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="5" tools:itemCount="3" tools:layout_editor_absoluteX="1dp" tools:layout_editor_absoluteY="247dp"/> <TextView android:id="@+id/text_recommend" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@id/recycler_classify" app:layout_constraintLeft_toLeftOf="parent" android:textSize="14dp" android:text="任务推荐" android:textColor="@color/black" android:layout_margin="@dimen/frame_margin_lr" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_recommend" android:layout_width="match_parent" android:layout_height="wrap_content" tools:listitem="@layout/homt_item_recommend" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@id/text_recommend" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.core.widget.NestedScrollView> </LinearLayout> app/src/main/res/layout/home_item_classify.xml
New file @@ -0,0 +1,30 @@ <?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_marginRight="10dp" android:layout_marginLeft="10dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/img_icon" android:layout_width="80dp" android:layout_height="wrap_content" android:adjustViewBounds="true" tools:srcCompat="@tools:sample/avatars" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@id/img_icon" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/home_item_top.xml
New file @@ -0,0 +1,85 @@ <?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="wrap_content" android:background="@drawable/bg_border_gray_corner" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_marginRight="5dp" android:padding="10dp" tools:ignore="MissingConstraints"> <TextView android:id="@+id/txt_type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:textSize="13sp" android:textColor="@color/red" android:paddingLeft="8dp" android:paddingRight="8dp" android:paddingTop="3dp" android:paddingBottom="3dp" android:background="@drawable/bg_border_red_corner" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="4dp" tools:text="类型" /> <TextView android:id="@+id/txt_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="4dp" android:text="任务标题\nl;ajsdlfkjalsjd" android:textColor="@color/black" android:layout_marginTop="10dp" app:layout_constraintTop_toBottomOf="@id/txt_type" tools:layout_editor_absoluteY="23dp" /> <TextView android:id="@+id/txt_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bg_red_corner" android:text="标签" android:textSize="10sp" android:textColor="@color/white" android:padding="3dp" android:layout_marginRight="10dp" app:layout_constraintBottom_toBottomOf="@id/txt_title" app:layout_constraintTop_toTopOf="@id/image_head"/> <TextView android:id="@+id/txt_detail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="参与人数\n剩余数量" android:layout_marginTop="8dp" android:layout_marginLeft="10dp" app:layout_constraintLeft_toRightOf="@id/txt_label" app:layout_constraintTop_toBottomOf="@id/txt_title" /> <ImageView android:id="@+id/image_head" android:layout_width="43dp" android:layout_height="32dp" android:scaleType="centerCrop" android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@id/txt_detail" tools:srcCompat="@tools:sample/avatars" /> <TextView android:id="@+id/txt_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:layout_marginLeft="10dp" android:textColor="@color/red" app:layout_constraintLeft_toRightOf="@id/image_head" app:layout_constraintTop_toTopOf="@id/image_head" app:layout_constraintBottom_toBottomOf="@id/image_head" tools:text="+ 35.00元" /> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/homt_item_recommend.xml
New file @@ -0,0 +1,128 @@ <?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:padding="@dimen/frame_margin_lr" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/image_head" android:layout_width="50dp" android:layout_height="50dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" tools:srcCompat="@tools:sample/avatars" /> <TextView android:id="@+id/txt_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/black" android:text="标题" android:textSize="14sp" android:layout_marginLeft="@dimen/frame_margin_lr" app:layout_constraintLeft_toRightOf="@id/image_head" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/txt_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标签" android:textColor="@color/red" android:layout_marginTop="4dp" android:paddingLeft="4dp" android:paddingRight="4dp" android:paddingTop="2dp" android:paddingBottom="2dp" android:textSize="10sp" android:background="@drawable/bg_border_slender_red_corner" android:layout_marginLeft="@dimen/frame_margin_lr" app:layout_constraintTop_toBottomOf="@id/txt_title" app:layout_constraintLeft_toRightOf="@id/image_head"/> <TextView android:id="@+id/txt_detail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" android:text="100人完成 | 剩余数100" android:layout_marginLeft="@dimen/frame_margin_lr" app:layout_constraintTop_toBottomOf="@id/txt_label" app:layout_constraintLeft_toRightOf="@id/image_head" /> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"> <TextView android:id="@+id/txt_index" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="顶" android:paddingLeft="3dp" android:paddingRight="3dp" android:textSize="10sp" android:background="@drawable/bg_red_corner" android:textColor="@color/white" android:layout_marginRight="10dp" app:layout_goneMarginRight="0dp" app:layout_constraintBottom_toTopOf="@id/txt_price" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintHorizontal_weight="1" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@id/txt_recommend"/> <TextView android:id="@+id/txt_recommend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="推" android:paddingLeft="3dp" android:paddingRight="3dp" android:textSize="10sp" android:background="@drawable/bg_red_corner" android:textColor="@color/white" android:layout_marginRight="10dp" android:visibility="gone" app:layout_goneMarginRight="0dp" app:layout_constraintBottom_toTopOf="@id/txt_price" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintHorizontal_weight="1" app:layout_constraintRight_toLeftOf="@id/txt_deposit" app:layout_constraintLeft_toRightOf="@id/txt_index"/> <TextView android:id="@+id/txt_deposit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保" android:paddingLeft="3dp" android:paddingRight="3dp" android:textSize="10sp" android:background="@drawable/bg_red_corner" android:textColor="@color/white" android:visibility="gone" app:layout_constraintBottom_toTopOf="@id/txt_price" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintHorizontal_weight="1" app:layout_constraintLeft_toRightOf="@id/txt_recommend" app:layout_constraintRight_toRightOf="parent"/> <TextView android:id="@+id/txt_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+ 35.00元" android:textColor="@color/red" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/values/colors.xml
@@ -7,4 +7,6 @@ <color name="teal_700">#FF018786</color> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> <color name="red">#FF1414</color> <color name="gray">#CDCDCD</color> </resources> app/src/main/res/values/dimens.xml
@@ -2,4 +2,7 @@ <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> <dimen name="small_radios">3dp</dimen> <dimen name="radios">10dp</dimen> <dimen name="frame_margin_lr">10dp</dimen> </resources>