主界面的实现
前面已做好了核心布局文件,接下来要做的就是让客户端活起来,现在的任务就是实现一个侧滑菜单的功能,
实现这个功能也并不难,使用V4包下的DrawerLayout 控件可以轻松解决这一问题 ,代码如下,
package eNews.activity; import java.lang.ref.WeakReference; import android.annotation.SuppressLint; import android.app.ActionBar; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.tencent.connect.common.Constants; import com.tencent.tauth.Tencent; import eNews.app.R; import eNews.common.HandlerWhat; import eNews.fragments.MainFragment; import eNews.fragments.MoreAboutFragment; import eNews.fragments.PictureFragment; import eNews.fragments.VideoFragment; import eNews.fragments.WeatherFragment; import eNews.thirdParty.TencentThirdParty; /** * * @author k 主界面 */ public class MainWindows extends Activity implements OnClickListener { @SuppressWarnings("unused") private MainWindowsHandler mainWindowsHandler; private ImageView logo; private DrawerLayout drawerLayout; //V4 包下的抽屉控件 private LinearLayout menu_left; //左侧菜单控件 private LinearLayout menu_mainLayout; <span style="white-space:pre"> </span> private LinearLayout menu_picLayout; private LinearLayout menu_videoLayout; private LinearLayout menu_weatherLayout; private LinearLayout menu_moreLayout; private LinearLayout menu_collectLayout; public MainFragment mainFragment; //项目里的碎片 public PictureFragment pictureFragment; public VideoFragment videoFragment; public WeatherFragment weatherFragment; public MoreAboutFragment aboutFragment; private static ImageButton userImgBtn; private static TextView userName; private showCollectActivity showcollectActivityListener; //收藏 private boolean isOpen; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.mainwindows); //对应的布局文件 initTencentInstance(); //初始化腾讯第三方实例 init(); initFragment(); //初始化碎片容器 } private void initTencentInstance() { TencentThirdParty.getInstance(getApplicationContext()) .getTencentInstance(); } private void init() { mainWindowsHandler = new MainWindowsHandler(this); mainFragment = new MainFragment(); videoFragment = new VideoFragment(); weatherFragment = new WeatherFragment(); pictureFragment = new PictureFragment(); aboutFragment = new MoreAboutFragment(); showcollectActivityListener = new showCollectActivity(); drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); //获取抽屉控件实例 drawerLayout.setDrawerShadow(R.drawable.shadow, GravityCompat.START); //设置抽屉打开时的阴影部分 drawerLayout.setDrawerListener(new ActionBarDrawerToggleListener()); //为抽屉设置监听事件 menu_left = (LinearLayout) findViewById(R.id.menuLayout); menu_left.setOnTouchListener(new OnTouchListener() { @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return true; } }); menu_mainLayout = (LinearLayout) findViewById(R.id.menuMain); menu_mainLayout.setOnClickListener(this); menu_picLayout = (LinearLayout) findViewById(R.id.menuPic); menu_picLayout.setOnClickListener(this); menu_videoLayout = (LinearLayout) findViewById(R.id.menuVideo); menu_videoLayout.setOnClickListener(this); menu_weatherLayout = (LinearLayout) findViewById(R.id.menuWeather); menu_weatherLayout.setOnClickListener(this); menu_moreLayout = (LinearLayout) findViewById(R.id.menuMore); menu_moreLayout.setOnClickListener(this); menu_collectLayout = (LinearLayout) findViewById(R.id.menuCollect); menu_collectLayout.setOnClickListener(showcollectActivityListener); userImgBtn = (ImageButton) findViewById(R.id.userImg); userImgBtn.setOnClickListener(new LoginBtnClick()); userName = (TextView) findViewById(R.id.userName); userName.setOnClickListener(showcollectActivityListener); } private void initFragment() { FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); transaction.replace(R.id.frame_content, mainFragment); transaction.commit(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); ActionBar actionBar = getActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); actionBar.setCustomView(R.layout.actionbar_layout); actionBar.setDisplayShowCustomEnabled(true); logo = (ImageView) actionBar.getCustomView().findViewById( R.id.actionbar_logo); logo.setOnClickListener(new OnClickListener() { //为actionbar上的logo图标设置监听,以便操作抽屉的打开与关闭 @Override public void onClick(View v) { if (!isOpen) { drawerLayout.openDrawer(Gravity.LEFT); //打开左侧抽屉 isOpen = true; } else { drawerLayout.closeDrawer(Gravity.LEFT); //关闭左侧抽屉 isOpen = false; logo.setTranslationX(0); } } }); } @Override public void onClick(View v) { //监听左侧菜单的按钮 // TODO Auto-generated method stub FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); switch (v.getId()) { case R.id.menuMain: drawerLayout.closeDrawer(menu_left); if (mainFragment == null) mainFragment = new MainFragment(); transaction.replace(R.id.frame_content, mainFragment); //替换当前的碎片 System.out.println("menuVideo"); break; case R.id.menuPic: drawerLayout.closeDrawer(menu_left); if (pictureFragment == null) pictureFragment = new PictureFragment(); transaction.replace(R.id.frame_content, pictureFragment); System.out.println("menuPic"); break; case R.id.menuVideo: drawerLayout.closeDrawer(menu_left); if (videoFragment == null) videoFragment = new VideoFragment(); transaction.replace(R.id.frame_content, videoFragment); System.out.println("menuVideo"); break; case R.id.menuWeather: drawerLayout.closeDrawer(menu_left); if (weatherFragment == null) weatherFragment = new WeatherFragment(); transaction.replace(R.id.frame_content, weatherFragment); System.out.println("menuWeather"); break; case R.id.menuMore: drawerLayout.closeDrawer(menu_left); if (aboutFragment == null) aboutFragment = new MoreAboutFragment(); transaction.replace(R.id.frame_content, aboutFragment); System.out.println("menuMore"); break; default: if (mainFragment == null) mainFragment = new MainFragment(); transaction.replace(R.id.frame_content, mainFragment); break; } transaction.commit(); } class showCollectActivity implements OnClickListener { @Override public void onClick(View v) { <span style="font-family: Arial, Helvetica, sans-serif;">//当点击收藏按钮时触发</span> if (TencentThirdParty.getInstance(getApplicationContext()) .checkIsLogged()) { Intent intent = new Intent(MainWindows.this, CollectActivity.class); startActivity(intent); } else { Toast.makeText(getApplicationContext(), "请点击头像登录", Toast.LENGTH_SHORT).show(); } } } class LoginBtnClick implements OnClickListener { @Override public void onClick(View v) { login(); } } public void showMainFragment() { //显示主碎片 FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); if (mainFragment == null) mainFragment = new MainFragment(); transaction.replace(R.id.frame_content, mainFragment); transaction.commit(); getActionBar().show(); } class ActionBarDrawerToggleListener implements DrawerListener { //抽屉监听事件 @Override public void onDrawerClosed(View drawerView) { //抽屉关闭 // TODO Auto-generated method stub System.out.println("onDrawerOpen ->" + isOpen + ""); logo.setImageResource(R.drawable.menu_close); } @Override public void onDrawerOpened(View drawerView) { //抽屉打开 // TODO Auto-generated method stub System.out.println("onDrawerClosed ->" + isOpen + ""); logo.setImageResource(R.drawable.menu_open); } @Override public void onDrawerSlide(View drawerView, float offset) { // TODO Auto-generated method stub } @Override public void onDrawerStateChanged(int newState) { // TODO Auto-generated method stub } } static class MainWindowsHandler extends Handler { WeakReference<MainWindows> mainReference; //设成弱引用,避免引起内存泄漏 public MainWindowsHandler(MainWindows mainWindows) { // TODO Auto-generated constructor stub mainReference = new WeakReference<MainWindows>(mainWindows); } @Override public void handleMessage(Message msg) { //handler 暂时没有用上 // TODO Auto-generated method stub super.handleMessage(msg); MainWindows mainWindows = mainReference.get(); if (mainWindows != null) { System.out.println("mainReference.get()"); switch (msg.what) { case HandlerWhat.mainNews: break; case HandlerWhat.pictureNews: break; case HandlerWhat.videoNews: break; case HandlerWhat.weatherNews: break; default: break; } } } } private void login() { //腾讯第三方登录 TencentThirdParty.getInstance(getApplicationContext()).userLogin(this); // updateUserInfo(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) { //腾讯官方文档说这行这行代码是为了照顾低端机,具体为什么,没有考究 Tencent.onActivityResultData( requestCode, resultCode, data, TencentThirdParty.getInstance(getApplicationContext()).loginIUListener); } super.onActivityResult(requestCode, resultCode, data); } public static void setUserImgBtn(Bitmap bitmap) { //设置用户头像 if (bitmap == null) userImgBtn.setImageResource(R.drawable.people1); else userImgBtn.setImageBitmap(bitmap); } public static void setUserName(String name) { userName.setText(name); } }这样结合以前的布局文件,抽屉侧滑功能就可以实现了,写到这加上代码所提及到的碎片就可以看到及时的效果了,当然现在还不能看到新闻数据,因为还没有获取网络数据
作者:w1143408997 发表于2016/9/14 20:38:22 原文链接
阅读:113 评论:0 查看评论