项目截图:
用到的开源库有:
android-support-v7-appcompat
android-support-v7cardview
lib_ParallaxScroll
lib_SHSwitchView
lib_yuchen0612
library
library_PagerSlidingTabStrip
FirstActivity欢迎界面类
public class FirstActivity extends Activity
{
private long delayMillis=1000;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
startActivity(new Intent(FirstActivity.this,MainActivity.class));
FirstActivity.this.finish();
}
}, delayMillis);
}
}
MainActivity类:
public class MainActivity extends AppCompatActivity implements OnClickListener
{
private DrawerLayout drawer;
private ListView drawerList;
private Toolbar toolbar;
private Fragment fragment;
private DrawerListAdapter mDrawerAdapter;
private List<Other> alTheme = new ArrayList<Other>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (SPUtils.isNight(this))
{
setTheme(R.style.night);
} else
{
setTheme(R.style.light);
}
setContentView(R.layout.activity_main);
initData();
initToolbar();
initDrawerLayout();
initDrawerMenu();
initFragment();
}
private void initData()
{
ApiClient.getTheme(this, new ResponseListener()
{
@Override
public void onResponse(String arg0)
{
Themes themes = GsonUtils.parseJSON(arg0, Themes.class);
List<Other> others = themes.getOthers();
alTheme.addAll(others);
mDrawerAdapter.notifyDataSetChanged();
}
@Override
public void onErrorResponse(VolleyError arg0)
{
Log.e("网络下载失败", "arg0=null" + arg0.getMessage());
}
});
}
private void initFragment()
{
replacefragment(new MainFragment());
}
private void initDrawerMenu()
{
drawerList = (ListView) findViewById(R.id.main_listView1);
// 设置选中状态为单选模式
drawerList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
View view = getLayoutInflater().inflate(R.layout.layout_relativet_headview, null);
headFindViewControl(view);
drawerList.addHeaderView(view, null, false);
mDrawerAdapter = new DrawerListAdapter();
drawerList.setAdapter(mDrawerAdapter);
drawerList.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
position -= drawerList.getHeaderViewsCount();
Other other = alTheme.get(position);
fragment = new ThemesContentFragment(other);
toolbar.setTitle(other.getName());
drawer.closeDrawer(drawerList);
replacefragment(fragment);
}
});
}
public void headFindViewControl(View view)
{
LinearLayout login = (LinearLayout) view.findViewById(R.id.head_login);// 登录
LinearLayout sc = (LinearLayout) view.findViewById(R.id.head_sc);// 收藏
LinearLayout wc = (LinearLayout) view.findViewById(R.id.head_wc);// 完成
LinearLayout sy = (LinearLayout) view.findViewById(R.id.head_sy);// 首页
ImageView img = (ImageView) view.findViewById(R.id.head_login_img);// 登录图标
login.setOnClickListener(this);
sy.setOnClickListener(this);
sc.setOnClickListener(this);
wc.setOnClickListener(this);
}
public void replacefragment(Fragment fragment)
{
FragmentManager smf = getSupportFragmentManager();
FragmentTransaction bt = smf.beginTransaction();
bt.replace(R.id.main_container, fragment);
bt.commit();
}
@SuppressWarnings("deprecation")
private void initDrawerLayout()
{
drawer = (DrawerLayout) findViewById(R.id.main_drawer);
}
private void initToolbar()
{
toolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(toolbar);
ActionBar supportActionBar = getSupportActionBar();
// 设置显示返回按钮图标
supportActionBar.setDisplayHomeAsUpEnabled(true);
// 设置标题
supportActionBar.setTitle("知乎日报");
// 设置标题图标
supportActionBar.setLogo(R.drawable.toolbar_icon1);
// 设置显示标题图标
supportActionBar.setDisplayShowHomeEnabled(true);
supportActionBar.setDisplayUseLogoEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
MenuItem item = menu.findItem(R.id.item2);
if (SPUtils.isNight(this))
{
item.setTitle("白天模式");
} else
{
item.setTitle("夜间模式");
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
drawer.openDrawer(drawerList);
break;
case R.id.item2:// 夜间模式和白天模式互相切换
boolean isNight = SPUtils.isNight(this);
SPUtils.setMode(this, !isNight);
finish();
startActivity(new Intent(this, MainActivity.class));
overridePendingTransition(0, 0);
break;
case R.id.item3:// 打开设置选项
startActivity(new Intent(this, SettingActivity.class));
finish();
break;
default:
break;
}
return true;
}
class DrawerListAdapter extends BaseAdapter
{
@Override
public int getCount()
{
return alTheme.size();
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
@SuppressLint("ViewHolder")
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View layout = getLayoutInflater().inflate(R.layout.mdrawerlist_linear, null);
TextView tv = (TextView) layout.findViewById(R.id.tv_mdrawerlist);
String text = alTheme.get(position).getName();
tv.setText(text);
return layout;
}
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.head_login:
fragment = new LoginFragment();
toolbar.setTitle("登录界面");
break;
case R.id.head_sc:
fragment = new CollectFragment();
toolbar.setTitle("我的收藏");
break;
case R.id.head_wc:
Toast.makeText(this, "离线下载完成", Toast.LENGTH_SHORT).show();
break;
case R.id.head_sy:
fragment = new MainFragment();
toolbar.setTitle("首页");
break;
default:
break;
}
drawer.closeDrawer(drawerList);
replacefragment(fragment);
}
}
DetailActivity详情类
public class DetailActivity extends AppCompatActivity implements OnClickListener
{
private ImageView img;
private TextView tvComment;
private TextView tvPraise;
private Story story;
private ImageView collectImage;
private WebView mweb;
private String url;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (SPUtils.isNight(this))
{
setTheme(R.style.night);
} else
{
setTheme(R.style.light);
}
setContentView(R.layout.activity_detail);
// 设置ToolBar
Toolbar mToolbar = (Toolbar) findViewById(R.id.detail_toolbar);
setSupportActionBar(mToolbar);
ActionBar mActionBar = getSupportActionBar();
mActionBar.setTitle("");
// 设置显示返回键
mActionBar.setDisplayHomeAsUpEnabled(true);
initWeb();
initData();
}
private void initData()
{
Intent intent = getIntent();
story = (Story) intent.getSerializableExtra("story");
boolean hasCollect = DBUtil.hasCollect(story);
if (hasCollect)
{
collectImage.setImageResource(R.drawable.collected); // 设已收藏图片
} else
{
collectImage.setImageResource(R.drawable.collect); // 设置未收藏图片
}
ApiClient.getDetail(this, story.getStoryId(), new ResponseListener()
{
@Override
public void onResponse(String arg0)
{
Detail detail = GsonUtils.parseJSON(arg0, Detail.class);
url=detail.getShareUrl();
// 对控件设置图片
UILUtils.displayImageNoAnim(detail.getImage(), img);
String body = detail.getBody();
List<String> css = detail.getCss();
if (css.size() > 0)
{
String cssLink = "<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\"> ";
String formatCss = String.format(cssLink, ZHConstants.url.css);
body = formatCss + body;
}
mweb.loadDataWithBaseURL(null, body, "text/html", "utf-8", null);
}
@Override
public void onErrorResponse(VolleyError arg0)
{
Log.e("DetailActivity", arg0 == null ? "error" : arg0.getMessage() + "");
}
});
}
@SuppressWarnings("deprecation")
@SuppressLint("SetJavaScriptEnabled")
private void initWeb()
{
mweb = (WebView) findViewById(R.id.detail_web);
WebSettings settings = mweb.getSettings();
settings.setJavaScriptEnabled(true);
if (SendData.get())
{
settings.setTextSize(TextSize.LARGER);
} else
{
settings.setTextSize(TextSize.NORMAL);
}
mweb.setWebViewClient(new WebViewClient());
img = (ImageView) findViewById(R.id.detail_img);
collectImage = (ImageView) findViewById(R.id.action_collect);// 收藏
collectImage.setOnClickListener(this);// 设置收藏监听事件
findViewById(R.id.action_share).setOnClickListener(this);// 分享
findViewById(R.id.action_item_comment).setOnClickListener(this);// 点评布局
tvComment = (TextView) findViewById(R.id.action_item_comment_text); // 点评数
findViewById(R.id.toolbar_linear_praise).setOnClickListener(this);// 点赞布局
tvPraise = (TextView) findViewById(R.id.action_item_praise_text); // 点赞数
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.action_share:
final Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, "知乎日报"+url);
startActivity(shareIntent);
break;
case R.id.action_collect:
collect();
break;
case R.id.action_item_comment:
break;
case R.id.toolbar_linear_praise:
break;
default:
break;
}
}
private void collect()
{
boolean hasCollect = DBUtil.hasCollect(story);
if (hasCollect)
{
collectImage.setImageResource(R.drawable.collect);
DBUtil.cancleCollect(story);
} else
{
collectImage.setImageResource(R.drawable.collected);
DBUtil.collect(story);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == android.R.id.home)
{
overridePendingTransition(0, 0);
startActivity(new Intent(this, MainActivity.class));
finish();
}
return true;
}
}
CommentActivity 评论类
public class CommentActivity extends AppCompatActivity implements OnItemClickListener {
private List<Comment> mCommentsLong = new ArrayList<>();
private List<Comment> mCommentsShort = new ArrayList<>();
public boolean showShort;
private final class CommentAdapter extends BaseAdapter {
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (position == 0 || position == mCommentsLong.size() + 1) {
return 0;
} else {
return 1;
}
}
@SuppressLint("InflateParams")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View layout;
if (convertView == null) {
LayoutInflater inflater = getLayoutInflater();
if (position == 0 || position == mCommentsLong.size() + 1) {
layout = inflater.inflate(R.layout.activity_comment_list_header, null);
} else {
layout = inflater.inflate(R.layout.activity_comment_list_item, null);
}
} else {
layout = convertView;
}
// 更新数据
if (position == 0) {
TextView tvHeader = (TextView) layout.findViewById(R.id.comment_list_header_text);
tvHeader.setText(mCommentsLong.size() + "条长评");
ImageView imgIcon = (ImageView) layout.findViewById(R.id.comment_list_header_icon);
imgIcon.setVisibility(View.GONE);
} else if (position == mCommentsLong.size() + 1) {
layout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showShort = !showShort;
getCommentsShort();
}
});
TextView tvHeader = (TextView) layout.findViewById(R.id.comment_list_header_text);
ImageView imgIcon = (ImageView) layout.findViewById(R.id.comment_list_header_icon);
imgIcon.setVisibility(View.VISIBLE);
tvHeader.setText("条短评");
} else {
Comment comment;
if (position <= mCommentsLong.size() + 1){
comment = mCommentsLong.get(position - 1);
}else{
comment = mCommentsShort.get(position - 2 - mCommentsLong.size());
}
ImageView imgAvatar = (ImageView) layout.findViewById(R.id.comment_item_avatar);
ImageUtils.displayImage(CommentActivity.this, comment.getAvatar(), imgAvatar);
TextView tvAuthor = (TextView) layout.findViewById(R.id.comment_item_author);
tvAuthor.setText(comment.getAuthor());
TextView tvContent = (TextView) layout.findViewById(R.id.comment_item_content);
tvContent.setText(comment.getContent());
TextView tvTime = (TextView) layout.findViewById(R.id.comment_item_time);
// 美化时间格式
String prettyTime = PrettyTimeUtils.getPrettyTime(comment.getTime() * 1000L);
tvTime.setText(prettyTime);
ReplyTo replyTo = comment.getReplyTo();
TextView tvReply = (TextView) layout.findViewById(R.id.comment_replied_content);
if (replyTo == null){
tvReply.setVisibility(View.GONE);
}else{
tvReply.setVisibility(View.VISIBLE);
tvReply.setText(replyTo.toString());
}
}
return layout;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCount() {
if (showShort){
return mCommentsLong.size() + 2 + mCommentsShort.size();
}else{
return mCommentsLong.size() + 2;
}
}
}
private ActionBar mActionBar;
private ListView mListView;
private Story mStory;
private CommentAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comment);
initToolbar();
initUI();
initData();
}
private void initToolbar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mActionBar = getSupportActionBar();
mActionBar.setDisplayHomeAsUpEnabled(true);
mActionBar.setTitle("30条点评");
}
private void initData() {
Intent intent = getIntent();
mStory = (Story) intent.getSerializableExtra("story");
ApiClient.getCommentsLong(this, mStory.getStoryId(), new ResponseListener() {
@Override
public void onResponse(String arg0) {
CommentsShort commentsShort = GsonUtils.parseJSON(arg0, CommentsShort.class);
List<Comment> comments = commentsShort.getComments();
mCommentsLong.addAll(comments);
mAdapter.notifyDataSetChanged();
}
@Override
public void onErrorResponse(VolleyError arg0) {
}
});
}
private void getCommentsShort() {
if (mCommentsShort.size() == 0){
ApiClient.getCommentsShort(this, mStory.getStoryId(), new ResponseListener() {
@Override
public void onResponse(String arg0) {
CommentsShort commentsShort = GsonUtils.parseJSON(arg0, CommentsShort.class);
List<Comment> comments = commentsShort.getComments();
mCommentsShort.addAll(comments);
mAdapter.notifyDataSetChanged();
if (showShort){
mListView.setSelection(mCommentsLong.size() + 1);
}else{
mListView.setSelection(0);
}
}
@Override
public void onErrorResponse(VolleyError arg0) {
}
});
}else{
mAdapter.notifyDataSetChanged();
if (showShort){
mListView.setSelection(mCommentsLong.size() + 1);
}else{
mListView.setSelection(0);
}
}
}
private void initUI() {
mListView = (ListView) findViewById(R.id.comment_listview);
mAdapter = new CommentAdapter();
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(this, "toast", Toast.LENGTH_SHORT).show();
}
}
SettingActivity设置类:
public class SettingActivity extends FragmentActivity implements OnClickListener
{
private LinearLayout linear;
private ShSwitchView checkDZH;
private ShSwitchView checkNP;
private int newVersionCode = 2;
private String urlApk = "http://192.168.56.1:8080/visen.apk";
private UpdatePackage update;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (SPUtils.isNight(this))
{
setTheme(R.style.night);
} else
{
setTheme(R.style.light);
}
setContentView(R.layout.activity_setting);
linear = (LinearLayout) findViewById(R.id.setting_linear);
RelativeLayout relativeNopic= ( RelativeLayout) findViewById(R.id.setting_relativeNopic);
RelativeLayout relativeDzh = ( RelativeLayout) findViewById(R.id.setting_relativeDzh);
relativeNopic.setOnClickListener(this);
relativeDzh.setOnClickListener(this);
findViewById(R.id.setting_back_icon).setOnClickListener(this);// 返回键
findViewById(R.id.setting_clear).setOnClickListener(this);// 清除缓存
findViewById(R.id.setting_updatetv).setOnClickListener(this);// 检查更新
checkDZH = (ShSwitchView) findViewById(R.id.setting_dzh);// 设置大字号
checkNP = (ShSwitchView) findViewById(R.id.setting_nopic); // 设置无图模式
checkDZH.setOn(SendData.get());
checkNP.setOn(SPUtils.isNoPic(SettingActivity.this));
checkDZH.setOnSwitchStateChangeListener(new OnSwitchStateChangeListener()
{
@Override
public void onSwitchStateChange(boolean isOn)
{
SendData.set(SendData.get());
}
});
checkNP.setOnSwitchStateChangeListener(new OnSwitchStateChangeListener()
{
@Override
public void onSwitchStateChange(boolean isOn)
{
SPUtils.setNoPic(SettingActivity.this, SPUtils.isNoPic(SettingActivity.this));
}
});
}
@Override
protected void onResume()
{
super.onResume();
// 保存点击时的状态
if (SPUtils.isNight(this))
{
linear.setBackgroundResource(R.color.night_toolbar);
} else
{
linear.setBackgroundResource(R.color.light_toolbar);
}
}
@SuppressWarnings("deprecation")
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.setting_back_icon:
overridePendingTransition(0, 0);
startActivity(new Intent(this, MainActivity.class));
finish();
break;
case R.id.setting_relativeDzh:
checkDZH.setOn(!SendData.get());
SendData.set(!SendData.get());
break;
case R.id.setting_clear:// 清空缓存
ImageLoader.getInstance().clearDiscCache();
Toast.makeText(this, "清空成功", Toast.LENGTH_SHORT).show();
break;
case R.id.setting_relativeNopic:// 设置无图模式
boolean isNoPic = SPUtils.isNoPic(this);
checkNP.setOn(!isNoPic);
SPUtils.setNoPic(this, !isNoPic);
break;
case R.id.setting_updatetv:// 检查更新
setMyDialog( );
break;
default:
break;
}
}
public void setMyDialog( )
{
update = new UpdatePackage(this);
if (newVersionCode >update.getVersionNum())
{
String content = "1.解决了某bug\n2.增加了某功能";
MyDialog myDialog = new MyDialog(content);
myDialog.show(getSupportFragmentManager(), null);
// 点击确定时下载apk文件
myDialog.setOnConfirmListener(new OnConfirmListener()
{
@Override
public void confirm()
{
update.download(urlApk);
}
});
}
}
}
转载于:https://blog.51cto.com/1206995290qq/1850624