Commit 279e264c by 段启岩

博客列表

parent d214ba4c
...@@ -63,4 +63,5 @@ dependencies { ...@@ -63,4 +63,5 @@ dependencies {
annotationProcessor 'com.google.dagger:dagger-compiler:2.26' annotationProcessor 'com.google.dagger:dagger-compiler:2.26'
implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version"
implementation 'com.github.bumptech.glide:glide:3.7.0'
} }
package cn.yunliyunwai.beyondclouds.adapter;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.List;
import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.databinding.BlogItemBinding;
public class BlogListAdapter extends RecyclerView.Adapter<BlogListAdapter.BlogItemViewHolder> {
private List<Blog> blogList;
public static class BlogItemViewHolder extends RecyclerView.ViewHolder {
public BlogItemBinding binding;
public BlogItemViewHolder(BlogItemBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
public BlogListAdapter(List<Blog> blogList) {
this.blogList = blogList;
}
@Override
public BlogItemViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
BlogItemBinding blogItemBinding = BlogItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
return new BlogItemViewHolder(blogItemBinding);
}
@Override
public void onBindViewHolder(BlogItemViewHolder holder, int position) {
Blog blog = blogList.get(position);
BlogItemBinding binding = holder.binding;
binding.txtTitle.setText(blog.getBlogTitle());
binding.txtAbstract.setText(blog.getBlogAbstract());
if (null != blog.getCover() && !TextUtils.isEmpty(blog.getCover())) {
Glide.with(holder.binding.getRoot().getContext()).load(blog.getCover()).into(binding.blogCover);
}
}
@Override
public int getItemCount() {
return blogList.size();
}
}
\ No newline at end of file
...@@ -25,7 +25,7 @@ public class CategoryFragmentAdapter extends FragmentStatePagerAdapter { ...@@ -25,7 +25,7 @@ public class CategoryFragmentAdapter extends FragmentStatePagerAdapter {
public Fragment getItem(int position) { public Fragment getItem(int position) {
HomeFragment.BlogListFragment fragment = HomeFragment.BlogListFragment.newInstance(); HomeFragment.BlogListFragment fragment = HomeFragment.BlogListFragment.newInstance();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putString("text", categories.get(position).getCategory()); bundle.putInt("categoryId", categories.get(position).getCategoryId());
fragment.setArguments(bundle); fragment.setArguments(bundle);
return fragment; return fragment;
} }
......
package cn.yunliyunwai.beyondclouds.data.model;
public class Blog {
private String blogId;
private String userId;
private String categoryId;
private String category;
private String blogTitle;
private String blogAbstract;
private String cover;
private String originLink;
private String viewPrivileges;
private String allowComment;
private String allowForward;
public String getBlogId() {
return blogId;
}
public void setBlogId(String blogId) {
this.blogId = blogId;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getCategoryId() {
return categoryId;
}
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getBlogTitle() {
return blogTitle;
}
public void setBlogTitle(String blogTitle) {
this.blogTitle = blogTitle;
}
public String getBlogAbstract() {
return blogAbstract;
}
public void setBlogAbstract(String blogAbstract) {
this.blogAbstract = blogAbstract;
}
public String getCover() {
return cover;
}
public void setCover(String cover) {
this.cover = cover;
}
public String getOriginLink() {
return originLink;
}
public void setOriginLink(String originLink) {
this.originLink = originLink;
}
public String getViewPrivileges() {
return viewPrivileges;
}
public void setViewPrivileges(String viewPrivileges) {
this.viewPrivileges = viewPrivileges;
}
public String getAllowComment() {
return allowComment;
}
public void setAllowComment(String allowComment) {
this.allowComment = allowComment;
}
public String getAllowForward() {
return allowForward;
}
public void setAllowForward(String allowForward) {
this.allowForward = allowForward;
}
}
package cn.yunliyunwai.beyondclouds.data.model;
import java.util.List;
public class Page<T> {
private Integer totalPage;
private Integer totalRecords;
private List<T> dataList;
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public Integer getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(Integer totalRecords) {
this.totalRecords = totalRecords;
}
public List<T> getDataList() {
return dataList;
}
public void setDataList(List<T> dataList) {
this.dataList = dataList;
}
}
...@@ -11,7 +11,9 @@ import java.util.List; ...@@ -11,7 +11,9 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.Page;
import cn.yunliyunwai.beyondclouds.data.model.Result; import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.source.local.database.BlogDatabase; import cn.yunliyunwai.beyondclouds.data.source.local.database.BlogDatabase;
import cn.yunliyunwai.beyondclouds.data.source.remote.BlogApiStore; import cn.yunliyunwai.beyondclouds.data.source.remote.BlogApiStore;
...@@ -41,6 +43,11 @@ public class BlogRepositoryImpl implements IBlogRepository { ...@@ -41,6 +43,11 @@ public class BlogRepositoryImpl implements IBlogRepository {
} }
@Override @Override
public LiveData<Result<Page<Blog>>> getBlogList(Integer categoryId, Integer page, Integer size) {
return blogApiStore.getBlogList(categoryId, page, size);
}
@Override
public void saveCategories(List<BlogCategory> categories) { public void saveCategories(List<BlogCategory> categories) {
blogDatabase.blogDao().saveCategories(categories); blogDatabase.blogDao().saveCategories(categories);
} }
......
...@@ -4,7 +4,9 @@ import androidx.lifecycle.LiveData; ...@@ -4,7 +4,9 @@ import androidx.lifecycle.LiveData;
import java.util.List; import java.util.List;
import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.Page;
import cn.yunliyunwai.beyondclouds.data.model.Result; import cn.yunliyunwai.beyondclouds.data.model.Result;
public interface IBlogRepository { public interface IBlogRepository {
...@@ -17,5 +19,6 @@ public interface IBlogRepository { ...@@ -17,5 +19,6 @@ public interface IBlogRepository {
LiveData<List<BlogCategory>> loadCategoriesFromLocal(); LiveData<List<BlogCategory>> loadCategoriesFromLocal();
LiveData<Result<Page<Blog>>> getBlogList(Integer categoryId, Integer page, Integer size);
void saveCategories(List<BlogCategory> data); void saveCategories(List<BlogCategory> data);
} }
...@@ -4,11 +4,19 @@ import androidx.lifecycle.LiveData; ...@@ -4,11 +4,19 @@ import androidx.lifecycle.LiveData;
import java.util.List; import java.util.List;
import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.Page;
import cn.yunliyunwai.beyondclouds.data.model.Result; import cn.yunliyunwai.beyondclouds.data.model.Result;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Query;
public interface BlogApiStore { public interface BlogApiStore {
@GET("blog/categories") @GET("blog/categories")
LiveData<Result<List<BlogCategory>>> getCategories(); LiveData<Result<List<BlogCategory>>> getCategories();
@GET("blogs")
LiveData<Result<Page<Blog>>> getBlogList(@Query("categoryId") Integer categoryId,
@Query("page") Integer page,
@Query("size") Integer size);
} }
...@@ -7,6 +7,7 @@ import javax.inject.Singleton; ...@@ -7,6 +7,7 @@ import javax.inject.Singleton;
import cn.yunliyunwai.beyondclouds.MainActivity; import cn.yunliyunwai.beyondclouds.MainActivity;
import cn.yunliyunwai.beyondclouds.di.module.AppModule; import cn.yunliyunwai.beyondclouds.di.module.AppModule;
import cn.yunliyunwai.beyondclouds.di.module.AppModuleBinds; import cn.yunliyunwai.beyondclouds.di.module.AppModuleBinds;
import cn.yunliyunwai.beyondclouds.di.module.BlogListFragmentModuleBinds;
import cn.yunliyunwai.beyondclouds.di.module.HomeFragmentModuleBinds; import cn.yunliyunwai.beyondclouds.di.module.HomeFragmentModuleBinds;
import cn.yunliyunwai.beyondclouds.di.module.SplashActivityModuleBinds; import cn.yunliyunwai.beyondclouds.di.module.SplashActivityModuleBinds;
import cn.yunliyunwai.beyondclouds.di.module.ViewModelFactory; import cn.yunliyunwai.beyondclouds.di.module.ViewModelFactory;
...@@ -19,6 +20,7 @@ import dagger.Component; ...@@ -19,6 +20,7 @@ import dagger.Component;
AppModuleBinds.class, AppModuleBinds.class,
ViewModelFactory.ViewModelBuilderModule.class, ViewModelFactory.ViewModelBuilderModule.class,
HomeFragmentModuleBinds.class, HomeFragmentModuleBinds.class,
BlogListFragmentModuleBinds.class,
SplashActivityModuleBinds.class SplashActivityModuleBinds.class
}) })
public interface AppComponent { public interface AppComponent {
...@@ -32,6 +34,8 @@ public interface AppComponent { ...@@ -32,6 +34,8 @@ public interface AppComponent {
SplashActivityComponent.Factory splashActivityComponent(); SplashActivityComponent.Factory splashActivityComponent();
BlogListFragmentComponent.Factory blogListFragmentComponent();
void inject(MainActivity mainActivity); void inject(MainActivity mainActivity);
} }
package cn.yunliyunwai.beyondclouds.di.component;
import cn.yunliyunwai.beyondclouds.ui.HomeFragment;
import dagger.Subcomponent;
@Subcomponent
public interface BlogListFragmentComponent {
@Subcomponent.Factory
interface Factory {
BlogListFragmentComponent create();
}
void inject(HomeFragment.BlogListFragment blogListFragment);
}
package cn.yunliyunwai.beyondclouds.di.module;
import androidx.lifecycle.ViewModel;
import cn.yunliyunwai.beyondclouds.di.component.BlogListFragmentComponent;
import cn.yunliyunwai.beyondclouds.di.component.HomeFragmentComponent;
import cn.yunliyunwai.beyondclouds.viewmodel.BlogListFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.HomeFragmentViewModel;
import dagger.Binds;
import dagger.Module;
import dagger.multibindings.IntoMap;
@Module(subcomponents = BlogListFragmentComponent.class)
public abstract class BlogListFragmentModuleBinds {
@Binds
@IntoMap
@ViewModelFactory.ViewModelKey(BlogListFragmentViewModel.class)
abstract ViewModel bindBlogListFragmentViewModel(BlogListFragmentViewModel blogListFragmentViewModel);
}
...@@ -9,21 +9,28 @@ import android.widget.Toast; ...@@ -9,21 +9,28 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import net.lucode.hackware.magicindicator.ViewPagerHelper; import net.lucode.hackware.magicindicator.ViewPagerHelper;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator; import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.BeyondApplication; import cn.yunliyunwai.beyondclouds.BeyondApplication;
import cn.yunliyunwai.beyondclouds.R; import cn.yunliyunwai.beyondclouds.R;
import cn.yunliyunwai.beyondclouds.adapter.BlogListAdapter;
import cn.yunliyunwai.beyondclouds.adapter.CategoryFragmentAdapter; import cn.yunliyunwai.beyondclouds.adapter.CategoryFragmentAdapter;
import cn.yunliyunwai.beyondclouds.adapter.HomeNavigatorAdapter; import cn.yunliyunwai.beyondclouds.adapter.HomeNavigatorAdapter;
import cn.yunliyunwai.beyondclouds.base.BaseFragment; import cn.yunliyunwai.beyondclouds.base.BaseFragment;
import cn.yunliyunwai.beyondclouds.databinding.FragmentCategoryBinding; import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.databinding.FragmentBlogListBinding;
import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding;
import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.BlogListFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.HomeFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.HomeFragmentViewModel;
public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHomeBinding> { public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHomeBinding> {
...@@ -78,10 +85,12 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo ...@@ -78,10 +85,12 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
} }
public static class BlogListFragment extends Fragment { public static class BlogListFragment extends BaseFragment<BlogListFragmentViewModel, FragmentBlogListBinding> {
private FragmentCategoryBinding binding; private Integer categoryId;
private String text;
@Inject
ViewModelProvider.Factory factory;
public static BlogListFragment newInstance() { public static BlogListFragment newInstance() {
return new BlogListFragment(); return new BlogListFragment();
...@@ -92,21 +101,40 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo ...@@ -92,21 +101,40 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (null != getArguments()) { if (null != getArguments()) {
text = getArguments().getString("text"); categoryId = getArguments().getInt("categoryId");
} }
} }
@Nullable
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { protected void initInject() {
binding = FragmentCategoryBinding.inflate(inflater, container, false); ContextUtils.getAppComponent(requireActivity()).blogListFragmentComponent().create().inject(this);
return binding.getRoot(); }
@Override
protected BlogListFragmentViewModel initViewModel() {
return new ViewModelProvider(this, factory).get(BlogListFragmentViewModel.class);
}
@Override
protected FragmentBlogListBinding initDataBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return FragmentBlogListBinding.inflate(inflater, container, false);
} }
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
binding.txtCategory.setText(text); binding.blogRecyclerView.setHasFixedSize(true);
binding.blogRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
binding.getViewModel().getBlogList().observe(this, new Observer<List<Blog>>() {
@Override
public void onChanged(List<Blog> blogs) {
binding.blogRecyclerView.setAdapter(new BlogListAdapter(blogs));
}
});
binding.getViewModel().loadBlogList(categoryId);
} }
} }
} }
package cn.yunliyunwai.beyondclouds.viewmodel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModel;
import java.util.List;
import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.data.model.Page;
import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository;
public class BlogListFragmentViewModel extends ViewModel {
private IBlogRepository blogRepository;
private MutableLiveData<List<Blog>> blogList = new MutableLiveData<>();
public LiveData<List<Blog>> getBlogList() {
return blogList;
}
@Inject
public BlogListFragmentViewModel(IBlogRepository blogRepository) {
this.blogRepository = blogRepository;
}
public void loadBlogList(Integer categoryId) {
blogRepository.getBlogList(categoryId, 0, 10).observeForever(new Observer<Result<Page<Blog>>>() {
@Override
public void onChanged(Result<Page<Blog>> pageResult) {
if (pageResult.getCode() == 0) {
blogList.setValue(pageResult.getData().getDataList());
}
}
});
}
}
...@@ -50,7 +50,12 @@ ...@@ -50,7 +50,12 @@
android:layout_marginEnd="14dp" android:layout_marginEnd="14dp"
android:layout_marginRight="14dp" android:layout_marginRight="14dp"
android:textSize="16dp" android:textSize="16dp"
android:textColor="@color/colorPrimary" android:textColor="@color/colorGray"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
<View
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#efefef" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?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="@color/colorWhite"
android:paddingStart="12dp"
android:paddingLeft="12dp"
android:paddingTop="16dp"
android:paddingEnd="12dp"
android:paddingRight="12dp">
<TextView
android:id="@+id/txt_title"
android:layout_width="wrap_content"
android:layout_height="22dp"
android:text="SpringBoot迭代发布JRA瘦身配置"
android:textSize="15sp"
android:textColor="@color/colorTextAccent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="txt_title"
tools:layout_editor_absoluteX="12dp"
tools:layout_editor_absoluteY="16dp" />
<TextView
android:id="@+id/txt_abstract"
android:layout_marginTop="10dp"
android:layout_width="0dp"
android:layout_height="55dp"
android:textSize="13sp"
android:text="我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代我们所处的时代"
app:layout_constraintTop_toBottomOf="@id/barrier_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/blog_cover"/>
<ImageView
android:layout_marginTop="10dp"
android:id="@+id/blog_cover"
app:layout_constraintTop_toBottomOf="@id/barrier_title"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="82dp"
android:layout_height="55dp"
android:maxWidth="82dp"
android:maxHeight="55dp"
android:src="@drawable/pic1" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="txt_abstract"
tools:layout_editor_absoluteX="12dp"
tools:layout_editor_absoluteY="16dp" />
<TextView
android:id="@+id/txt_author"
android:layout_marginTop="10dp"
android:text="段启岩"
android:textSize="10sp"
android:textColor="@color/colorText"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/barrier_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt_dot"
android:text="·"
android:layout_marginTop="10dp"
android:textSize="10sp"
android:textStyle="bold"
android:textColor="@color/colorText"
app:layout_constraintTop_toBottomOf="@id/barrier_content"
app:layout_constraintStart_toEndOf="@id/txt_author"
android:paddingStart="6dp"
android:paddingLeft="6dp"
android:paddingEnd="6dp"
android:paddingRight="6dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt_create_time"
android:layout_marginTop="10dp"
android:textSize="10sp"
android:textColor="@color/colorText"
android:text="2020-2-18 10:24:00"
app:layout_constraintTop_toBottomOf="@id/barrier_content"
app:layout_constraintStart_toEndOf="@id/txt_dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="txt_create_time,txt_author,txt_dot"
tools:layout_editor_absoluteX="12dp"
tools:layout_editor_absoluteY="16dp" />
<View
app:layout_constraintTop_toBottomOf="@id/barrier_info"
android:layout_marginTop="18dp"
android:layout_width="0dp"
android:layout_height="1dp"
android:background="#efefef" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="cn.yunliyunwai.beyondclouds.viewmodel.BlogListFragmentViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/blog_recycler_view"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
<?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:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24dp"
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
...@@ -7,5 +7,6 @@ ...@@ -7,5 +7,6 @@
<color name="colorWhite">#FFFFFF</color> <color name="colorWhite">#FFFFFF</color>
<color name="colorStatusBar">#ffffff</color> <color name="colorStatusBar">#ffffff</color>
<color name="colorText">#999999</color> <color name="colorText">#999999</color>
<color name="colorGray">#666666</color>
<color name="colorTextAccent">#333333</color> <color name="colorTextAccent">#333333</color>
</resources> </resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment