前情回顾:
目前已经能够展示首页文章和banner图了,但是却无法显示文章的内容,就像给了一个美味的蛋糕,却不让你吃,现在,我们就来吃蛋糕(再不吃就过保质期了)。
显示文章内容.gif内容展示Activity
既然要展示内容,而这些内容都是通过网页来显示的,这里选择使用开源框架AgentWeb
。
1.在build.gradle里添加依赖。
implementation 'com.just.agentweb:agentweb:4.0.2'
implementation 'com.just.agentweb:download:4.0.2'
2.创建用来展示内容的WebViewActivity.java
,这里选择继承自AppCompatActivity
而不是BaseActivity
,创建完成后会自动生成对应的布局文件。
3.修改布局文件,这里直接给出布局文件代码。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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=".view.WebViewActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolBar"
style="@style/ToolBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/web_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="-1"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="@dimen/actionbar_title_size"
tools:text="@string/app_name"
/>
</android.support.v7.widget.Toolbar>
<LinearLayout
android:id="@+id/web_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolBar"
/>
</android.support.constraint.ConstraintLayout>
这里的toolBar的title我加了一个跑马灯的效果,如果觉得low,或者不希望无限循环,可以自己修改里面的属性值。添加的原因是为了展示全内容,并且不希望换行显示。这个布局文件整体来说还是很简单的。
4.完善WebViewActivity.java
。
从效果来看,需要有一个返回按钮,一个加载进度条,一个内容展示的界面,因为使用AgentWeb
,只需要关心返回按钮的添加即可。
package com.tom.wanandroid.view;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.just.agentweb.AgentWeb;
import com.tom.wanandroid.Constant;
import com.tom.wanandroid.R;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* <p>Title: MainModel</p>
* <p>Description: 内容展示界面</p>
*
* @author tom
* @date 2019/3/29 10:54
**/
public class WebViewActivity extends AppCompatActivity {
Unbinder mBinder;
@BindView(R.id.web_content)
LinearLayout mWebContent;
protected AgentWeb mAgentWeb;
@BindView(R.id.title)
TextView mTitle;
@BindView(R.id.toolBar)
Toolbar mToolBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
mBinder = ButterKnife.bind(this);
Intent intent = getIntent();
String title = intent.getStringExtra(Constant.ARTICLE_TITLE);
String url = intent.getStringExtra(Constant.ARTICLE_URL);
setUpActionBar(title);
mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(mWebContent, new LinearLayout.LayoutParams(-1, -1))
.useDefaultIndicator()
.createAgentWeb()
.ready()
.go(url);
}
/**
* <p>设置actionbar的title</p>
*
* @param title title
*/
private void setUpActionBar(String title) {
setSupportActionBar(mToolBar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setHomeAsUpIndicator(R.drawable.back_selector);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
mTitle.setText(title);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onPause() {
mAgentWeb.getWebLifeCycle().onPause();
super.onPause();
}
@Override
protected void onResume() {
mAgentWeb.getWebLifeCycle().onResume();
super.onResume();
}
@Override
protected void onDestroy() {
mAgentWeb.getWebLifeCycle().onDestroy();
super.onDestroy();
mBinder.unbind();
}
}
AgentWeb
的使用可以查看作者的github--AgentWeb
显示的容器已经准备完毕,接下来就是来给Banner和recycleView添加点击事件了。
添加点击事件
1.给Banner添加点击事件
mMainBanner.setOnBannerListener(),详细的可以看Android图片轮播控件
2.recycleView添加点击事件
给recycleView添加点击事件的方法有很多,我这里使用接口的方式。在ArticleAdapter.java
中定义
private OnItemClickListener mListener;
public void setListener(OnItemClickListener listener) {
mListener = listener;
}
public interface OnItemClickListener {
/**
* <p>文章点击事件</p>
* @param view view
* @param position 点击位置
*/
void onItemClick(View view, int position);
/**
* <p>收藏点击事件</p>
* @param view 点击的view
* @param position 点击的位置
*/
void onCollectionClick(View view, int position);
}
在onBindViewHolder
方法中,给itemView和mArticleCollection添加点击事件。
//item点击事件
articleHolder.itemView.setOnClickListener(v -> {
if (mListener != null) {
mListener.onItemClick(articleHolder.itemView,articleHolder.getLayoutPosition());
}
});
//收藏的点击事件
articleHolder.mArticleCollection.setOnClickListener(v ->{
if (mListener != null) {
mListener.onCollectionClick(articleHolder.mArticleCollection,articleHolder.getLayoutPosition());
}
});
具体的处理,就可以在MainActivity中进行实现了。
@Override
public void onItemClick(View view, int position) {
if (mArticleDatas != null) {
ArticleBean bean = mArticleDatas.get(position);
Utils.startWebView(this, bean.title, bean.link);
}
}
@Override
public void onCollectionClick(View view, int position) {
ToastUtils.setBgColor(getResources().getColor(R.color.colorPrimaryDark, null));
ToastUtils.setMsgColor(getResources().getColor(R.color.white, null));
ToastUtils.showShort(R.string.coming_soon);
}
跳转的工具类
package com.tom.wanandroid.utils;
import android.content.Context;
import android.content.Intent;
import com.tom.wanandroid.Constant;
import com.tom.wanandroid.view.WebViewActivity;
/**
* <p>Title: Utils</p>
* <p>Description: 工具集合</p>
*
* @author tom
* @date 2019/3/26 14:40
**/
public class Utils {
/**
* <p>跳转到WebView</p>
* @param context 上下文
* @param title title
* @param url url
*/
public static void startWebView(Context context, String title, String url) {
Intent intent = new Intent();
intent.setClass(context, WebViewActivity.class);
intent.putExtra(Constant.ARTICLE_TITLE, title);
intent.putExtra(Constant.ARTICLE_URL, url);
context.startActivity(intent);
}
}
完成以上内容,就可以吃蛋糕了。
网友评论