安卓开发新闻客户端
1.项目介绍
1.开发工具及语言
语言:java
工具:Android Studio
开发日期:2019.12
安卓开发的新闻客户端开发可以有效的锻炼安卓的编程能力,对于综合能力有着很大的帮助。
新闻客户端的开发涉及了安卓开发中界布局的设计、菜单的制作以及导航框架的使用
安卓网络编程中数据获取、适配器的使用等各种的的有效的技能,是一种极为有效的锻炼
。
2.使用技术框架
1.APP总体底部的4个Fragment切换和在每个Fragment中的ViewPage切换, 采用的是LuckyJayce/ViewPagerInd
icator的开源框架
2.当然,若是初次接触,建议学习SlidingTabsBasic,Google官方教程,简洁实
现SlidingTab。
3.新闻列表采用纵向RecyclerView,其中暂时划分为3种类型。
public static enum ITEM_TYPE {
ITEM_TYPE_BANNER,
ITEM_TYPE_IMAGE,
ITEM_TYPE_TEXT
}
4.采用的方法是通过Android自带的android.text.Html类解析Html和html下标签的图像。 核心代码如下:
URLImageParser p = new URLImageParser(content, this);
Spanned htmlSpan = Html.fromHtml(body, p, null);
content.setText(htmlSpan);
2.项目展示
1.运行截图
进入界面展示
主要内容展示
2.部分代码展示
1.主函数MainActivity.java
package com.hhxplaying.neteasedemo.netease.activity;
import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.hhxplaying.neteasedemo.netease.R;
import com.hhxplaying.neteasedemo.netease.SettingActivity;
import com.hhxplaying.neteasedemo.netease.fragment.FirstLayerFragment;
import com.readystatesoftware.systembartint.SystemBarTintManager;
import com.shizhefei.view.indicator.Indicator;
import com.shizhefei.view.indicator.IndicatorViewPager;
import com.shizhefei.view.viewpager.SViewPager;
public class MainActivity extends AppCompatActivity {
private IndicatorViewPager indicatorViewPager;
private SystemBarTintManager tintManager;
//private MenuItem action_settings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initWindow();
setContentView(R.layout.activity_main);
//MenuItem action_settings = (MenuItem)findViewById(R.id.action_settings);
SViewPager viewPager = (SViewPager) findViewById(R.id.tabmain_viewPager);
Indicator indicator = (Indicator) findViewById(R.id.tabmain_indicator);
indicatorViewPager = new IndicatorViewPager(indicator, viewPager);
indicatorViewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
// 禁止viewpager的滑动事件
viewPager.setCanScroll(false);
// 设置viewpager保留界面不重新加载的页面数量
viewPager.setOffscreenPageLimit(4);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitle(R.string.index_name);
setSupportActionBar(toolbar);
invalidateOptionsMenu();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@TargetApi(19)
private void initWindow() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintColor(getResources().getColor(R.color.tab_top_background));
tintManager.setStatusBarTintEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
Intent intent = new Intent(MainActivity.this, SettingActivity.class);
startActivity(intent);
//return true;
}
if (id == R.id.action_wholeday) {
//tabIcons = {R.style.AppTheme_Base};
//return true;
}
return super.onOptionsItemSelected(item);
}
private class MyAdapter extends IndicatorViewPager.IndicatorFragmentPagerAdapter {
private String[] tabNames = {"新闻", "阅读", "热点", "政要"};//, "我", R.drawable.maintab_5_selector
private int[] tabIcons = {R.drawable.maintab_1_selector, R.drawable.maintab_2_selector, R.drawable.maintab_3_selector,
R.drawable.maintab_4_selector, R.drawable.maintab_5_selector};
private LayoutInflater inflater;
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
inflater = LayoutInflater.from(getApplicationContext());
}
@Override
public int getCount() {
return tabNames.length;
}
@Override
public View getViewForTab(int position, View convertView, ViewGroup container) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.tab_main, container, false);
}
TextView textView = (TextView) convertView.findViewById(R.id.tv_tab_content);
textView.setText(tabNames[position]);
ImageView image = (ImageView) convertView.findViewById(R.id.iv_tab_img);
image.setImageResource(tabIcons[position]);
return convertView;
}
@Override
public Fragment getFragmentForPage(int position) {
Fragment mainFragment;
mainFragment = new FirstLayerFragment();
Bundle bundle = new Bundle();
bundle.putString(FirstLayerFragment.INTENT_STRING_TABNAME, tabNames[position]);
bundle.putInt(FirstLayerFragment.INTENT_INT_INDEX, position);
mainFragment.setArguments(bundle);
return mainFragment;
}
}
}