Android 导航栏如何轻松搞定
生活随笔
收集整理的這篇文章主要介紹了
Android 导航栏如何轻松搞定
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
APP市場中大多數(shù)新聞App都有導航菜單,導航菜單是一組標簽的集合,在新聞客戶端中,每個標簽標示一個新聞類別,對應下面ViewPager控件的一個分頁面,今日頭條, 網易新聞等。
話不多說直接先上原型圖,如圖1,圖2,圖3。
首先是新聞Fragment:
import java.io.File;import java.nio.channels.Channel;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONException;import org.json.JSONObject;import com.android.volley.Request;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.toolbox.ClearCacheRequest;import com.android.volley.toolbox.DiskBasedCache;import com.android.volley.toolbox.StringRequest;import com.android.volley.toolbox.Volley;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.juronggvo.R;import com.juronggvo.adapter.ExerciseAdapter;import com.juronggvo.adapter.NewsAdapter;import com.juronggvo.adapter.PageFragmentAdapter;import com.juronggvo.bean.NewsBean;import com.juronggvo.data.Config;import com.juronggvo.data.Contants;import com.juronggvo.data.GlobalData;import com.juronggvo.ui.inform.InformActivity;import com.juronggvo.ui.news.NewsActivity;import com.juronggvo.utils.Utils;import com.juronggvo.widget.MyListView;import com.juronggvo.widget.NewsTitleTextView;import com.juronggvo.widget.NewsViewPagerAdapter;import com.juronggvo.widget.PullToRefreshView;import com.juronggvo.widget.PullToRefreshView.OnFooterRefreshListener;import com.juronggvo.widget.PullToRefreshView.OnHeaderRefreshListener;import android.R.bool;import android.annotation.SuppressLint;import android.content.Intent;import android.graphics.Color;import android.os.Bundle;import android.os.Handler;import android.provider.Settings.Global;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.LayoutParams;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.DisplayMetrics;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.FrameLayout;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;/*** 新聞資訊* @description* @data 2016年12月13日* @author yang.yang*/public class NewsFragment extends Fragment implements OnPageChangeListener {private RadioGroup rgChannel;private View view;private ViewPager viewPager;private HorizontalScrollView hvChannel;private PageFragmentAdapter adapter=null;?private int page = 1 ;private Object newsLists;?private ListfragmentList=new ArrayList();private RequestQueue requestQueue =null;private ExerciseAdapter newsAdapter;private Handler handler = new Handler() ;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {view = inflater.inflate(R.layout.fragment_new, container, false);return view ;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);init() ;setTab(Config.newsPosition,true);}private void init(){requestQueue = Volley.newRequestQueue(getActivity());rgChannel=(RadioGroup)view.findViewById(R.id.rgChannel);viewPager=(ViewPager)view.findViewById(R.id.vpNewsList);hvChannel=(HorizontalScrollView)view.findViewById(R.id.hvChannel);rgChannel.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group,int checkedId) {viewPager.setCurrentItem(checkedId);}});viewPager.setOnPageChangeListener(this);initTab();//動態(tài)產生RadioButtoninitViewPager();}private void initTab(){?ListchannelList=ChannelDb.getSelectedChannel();for(int i=0;i<channelList.size();i++){RadioButton rb=(RadioButton)LayoutInflater.from(getActivity()).inflate(R.layout.tab_rb, null);rb.setId(i);rb.setText(channelList.get(i));RadioGroup.LayoutParams params=newRadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT,RadioGroup.LayoutParams.WRAP_CONTENT);rgChannel.addView(rb,params);}}private void initViewPager(){adapter=new PageFragmentAdapter(super.getFragmentManager());viewPager.setAdapter(adapter);viewPager.setOffscreenPageLimit(0);}/*** 滑動ViewPager時調整ScroollView的位置以便顯示按鈕* @param idx*/private void setTab(final int idx,boolean flag){RadioButton rb=(RadioButton)rgChannel.getChildAt(idx);rb.setChecked(true);int left=rb.getLeft();int width=rb.getMeasuredWidth();DisplayMetrics metrics=new DisplayMetrics();super.getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);int screenWidth=metrics.widthPixels;final int len=left+width/2-screenWidth/2;hvChannel.smoothScrollTo(len, 0);//滑動ScroollViewSystem.out.println("len====="+len);}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageSelected(int position) {// TODO Auto-generated method stubsetTab(position,false);}}復制代碼其中要用的fragment_new.xml
ChannelDb 類
import java.nio.channels.Channel;import java.util.ArrayList;import java.util.List;public class ChannelDb {private static ListselectedChannel=new ArrayList();static{selectedChannel.add("熱點資訊");selectedChannel.add("開發(fā)區(qū)概括");selectedChannel.add("最新動態(tài)");selectedChannel.add("文化生活");selectedChannel.add("旅游景點");selectedChannel.add("句容資訊");selectedChannel.add("黨建園地");selectedChannel.add("重點工程");}public static? ListgetSelectedChannel(){return selectedChannel;}}復制代碼tab_rb.xml
PageFragmentAdapter 類
import java.util.List;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;public class PageFragmentAdapter? extends FragmentPagerAdapter{private String[] tabs? = { "熱點資訊", "開發(fā)區(qū)概括","最新動態(tài)","文化生活","旅游景點","句容資訊","黨建園地","重點工程" };private FragmentManager fm;public PageFragmentAdapter(FragmentManager fm ){super(fm);this.fm=fm;}/*** 返回每頁對應的fragment的對象*/@Overridepublic Fragment getItem(int position) {return NewsFragmentFactory.create(position);}@Overridepublic int getCount() {return tabs.length;}@Overridepublic int getItemPosition(Object object) {return POSITION_NONE;? //沒有找到child要求重新加載}}NewsFragmentFactory類import com.juronggvo.ui.fragment.ApplyCarFragment;import com.juronggvo.ui.fragment.ApplyMeetingFragment;import com.juronggvo.ui.fragment.CulLifeFragment;import com.juronggvo.ui.fragment.DevoAreFragment;import com.juronggvo.ui.fragment.HotpointFragment;import com.juronggvo.ui.fragment.ImportantProFragment;import com.juronggvo.ui.fragment.JuRongFragment;import com.juronggvo.ui.fragment.NewRecentFragment;import com.juronggvo.ui.fragment.PartyBuildFragment;import com.juronggvo.ui.fragment.TravelFragment;import android.support.v4.app.Fragment;public class NewsFragmentFactory {/*** 根據不同的position生產對應的fragment對象* @param position* @return*/public static Fragment create(int position){Fragment fragment = null;switch (position) {case 0:fragment = new HotpointFragment();break;case 1:fragment = new DevoAreFragment();break;case 2:fragment = new NewRecentFragment();break;case 3:fragment = new CulLifeFragment();break;case 4:fragment = new TravelFragment();break;case 5:fragment = new JuRongFragment();break;case 6:fragment = new PartyBuildFragment();break;case 7:fragment = new ImportantProFragment();break;}return fragment;}}復制代碼然后在每個pager頁面寫你自己要的數(shù)據 就可以了。
偉大的哲學家我自己曾經說過,有夢想就要大聲說出來 ,萬丈高樓平地起,能不能行靠自己!
總結
以上是生活随笔為你收集整理的Android 导航栏如何轻松搞定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片加载之SDWebImage(上)
- 下一篇: LeetCode 406 Queu