From 9c79b7ac3e4d97ef3bf3301ee1df760220db8ef4 Mon Sep 17 00:00:00 2001 From: Administrator <123> Date: Sat, 23 Oct 2021 08:55:21 +0000 Subject: [PATCH] 首页UI布局 --- app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java | 31 +++- app/src/main/res/layout/home_item_classify.xml | 30 ++++ app/src/main/res/drawable/bg_border_gray_corner.xml | 12 + app/src/main/res/drawable/bg_border_slender_red_corner.xml | 12 + app/src/main/res/layout/home_item_top.xml | 85 ++++++++++++ app/src/main/res/layout/homt_item_recommend.xml | 128 ++++++++++++++++++ app/src/main/res/drawable/bg_border_red_corner.xml | 12 + app/src/main/res/layout/fragment_home.xml | 83 +++++++++-- app/src/main/res/values/colors.xml | 2 app/build.gradle | 3 app/src/main/res/drawable/bg_red_corner.xml | 9 + app/src/main/res/values/dimens.xml | 3 12 files changed, 384 insertions(+), 26 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 26eb9ec..d9ad186 100644 --- a/app/build.gradle +++ b/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' //经典刷新头 } \ No newline at end of file diff --git a/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java b/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java index 6bd88b5..b93cb75 100644 --- a/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java +++ b/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java @@ -4,29 +4,42 @@ 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; public class HomeFragment extends Fragment { private HomeViewModel homeViewModel; -private FragmentHomeBinding binding; + 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(); + 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) { @@ -36,7 +49,7 @@ return root; } -@Override + @Override public void onDestroyView() { super.onDestroyView(); binding = null; diff --git a/app/src/main/res/drawable/bg_border_gray_corner.xml b/app/src/main/res/drawable/bg_border_gray_corner.xml new file mode 100644 index 0000000..61aee37 --- /dev/null +++ b/app/src/main/res/drawable/bg_border_gray_corner.xml @@ -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> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_border_red_corner.xml b/app/src/main/res/drawable/bg_border_red_corner.xml new file mode 100644 index 0000000..ee52996 --- /dev/null +++ b/app/src/main/res/drawable/bg_border_red_corner.xml @@ -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> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_border_slender_red_corner.xml b/app/src/main/res/drawable/bg_border_slender_red_corner.xml new file mode 100644 index 0000000..e94d0e5 --- /dev/null +++ b/app/src/main/res/drawable/bg_border_slender_red_corner.xml @@ -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> \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_red_corner.xml b/app/src/main/res/drawable/bg_red_corner.xml new file mode 100644 index 0000000..c97214f --- /dev/null +++ b/app/src/main/res/drawable/bg_red_corner.xml @@ -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> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 7ecfe18..e61f67d 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/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:layout_height="match_parent" - tools:context=".ui.home.HomeFragment" > - - <TextView - android:id="@+id/text_home" + 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="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" /> -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file + android:layout_height="match_parent" + > + + <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" + 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> \ No newline at end of file diff --git a/app/src/main/res/layout/home_item_classify.xml b/app/src/main/res/layout/home_item_classify.xml new file mode 100644 index 0000000..493a4b8 --- /dev/null +++ b/app/src/main/res/layout/home_item_classify.xml @@ -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> \ No newline at end of file diff --git a/app/src/main/res/layout/home_item_top.xml b/app/src/main/res/layout/home_item_top.xml new file mode 100644 index 0000000..7362407 --- /dev/null +++ b/app/src/main/res/layout/home_item_top.xml @@ -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> \ No newline at end of file diff --git a/app/src/main/res/layout/homt_item_recommend.xml b/app/src/main/res/layout/homt_item_recommend.xml new file mode 100644 index 0000000..0974968 --- /dev/null +++ b/app/src/main/res/layout/homt_item_recommend.xml @@ -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> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127..9b5825e 100644 --- a/app/src/main/res/values/colors.xml +++ b/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> \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index e00c2dd..34a4985 100644 --- a/app/src/main/res/values/dimens.xml +++ b/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> \ No newline at end of file -- Gitblit v1.9.1