Android 博客园客户端 (一) 基本界面

===============================================================

菜单main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.arlen.cnblogs.MainActivity" >

    <item
        android:id="@+id/action_share"
        android:icon="@drawable/ic_action_share"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="@string/action_share">
        <menu>
            <item
                android:id="@+id/action_share_email"
                android:icon="@drawable/ic_action_share_email"
                android:orderInCategory="101"
                android:showAsAction="always"
                android:title="@string/action_share_email"/>
            <item
                android:id="@+id/action_share_message"
                android:icon="@drawable/ic_action_share_message"
                android:orderInCategory="101"
                android:showAsAction="always"
                android:title="@string/action_share_message"/>
            <item
                android:id="@+id/action_share_bluetooth"
                android:icon="@drawable/ic_action_share_bluetooth"
                android:orderInCategory="101"
                android:showAsAction="always"
                android:title="@string/action_share_bluetooth"/>
            <item
                android:id="@+id/action_share_system"
                android:icon="@drawable/ic_action_share_system"
                android:orderInCategory="101"
                android:showAsAction="always"
                android:title="@string/action_share_system"/>
        </menu>
    </item>
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:orderInCategory="100"
        android:showAsAction="always|collapseActionView"
        android:title="@string/action_search">
        <menu>
            <item
                android:id="@+id/action_search_user"
                android:icon="@drawable/ic_action_search_user"
                android:orderInCategory="102"
                android:showAsAction="always"
                android:title="@string/action_search_user"/>
            <item
                android:id="@+id/action_search_blog"
                android:icon="@drawable/ic_action_search_blog"
                android:orderInCategory="102"
                android:showAsAction="always"
                android:title="@string/action_search_blog"/>
        </menu>
    </item>
    <item
        android:id="@+id/action_refresh"
        android:icon="@drawable/ic_action_refresh"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="@string/action_refresh"/>

</menu>

主界面布局layout_main.xml

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

ActivityMain.java

  1 package com.arlen.cnblogs;
  2
  3 import com.arlen.cnblogs.fragment.AboutFragment;
  4 import com.arlen.cnblogs.fragment.BlogFragment;
  5 import com.arlen.cnblogs.fragment.HomeFragment;
  6 import com.arlen.cnblogs.fragment.NewsFragment;
  7 import com.arlen.cnblogs.fragment.SettingFragment;
  8
  9 import android.app.Activity;
 10 import android.app.Fragment;
 11 import android.app.FragmentManager;
 12 import android.content.res.Configuration;
 13 import android.os.Bundle;
 14 import android.support.v4.app.ActionBarDrawerToggle;
 15 import android.support.v4.view.GravityCompat;
 16 import android.support.v4.widget.DrawerLayout;
 17 import android.view.Menu;
 18 import android.view.MenuInflater;
 19 import android.view.MenuItem;
 20 import android.view.View;
 21 import android.widget.AdapterView;
 22 import android.widget.ArrayAdapter;
 23 import android.widget.ListView;
 24 import android.widget.Toast;
 25
 26 public class MainActivity extends Activity {
 27     private DrawerLayout drawerLayout;
 28     private ListView drawerList;
 29     private ActionBarDrawerToggle drawerToggle;
 30
 31     private CharSequence drawerTitle;
 32     private CharSequence mTitle;
 33     private String[] drawerListTitles;
 34
 35     @Override
 36     protected void onCreate(Bundle savedInstanceState) {
 37         super.onCreate(savedInstanceState);
 38         setContentView(R.layout.activity_main);
 39
 40         mTitle = drawerTitle = getTitle();
 41         drawerListTitles = getResources().getStringArray(R.array.navigation_list);
 42         drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
 43         drawerList = (ListView) findViewById(R.id.left_drawer);
 44
 45         // set a custom shadow that overlays the main content when the drawer opens
 46         drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
 47         // set up the drawer‘s list view with items and click listener
 48         drawerList.setAdapter(new ArrayAdapter<String>(this,
 49                 R.layout.drawer_list_item, drawerListTitles));
 50         drawerList.setOnItemClickListener(new DrawerItemClickListener());
 51
 52         // enable ActionBar app icon to behave as action to toggle nav drawer
 53         getActionBar().setDisplayHomeAsUpEnabled(true);
 54         getActionBar().setHomeButtonEnabled(true);
 55
 56         // ActionBarDrawerToggle ties together the the proper interactions
 57         // between the sliding drawer and the action bar app icon
 58         drawerToggle = new ActionBarDrawerToggle(
 59                 this,                  /* host Activity */
 60                 drawerLayout,         /* DrawerLayout object */
 61                 R.drawable.ic_drawer,  /* nav drawer image to replace ‘Up‘ caret */
 62                 R.string.drawer_open,  /* "open drawer" description for accessibility */
 63                 R.string.drawer_close  /* "close drawer" description for accessibility */
 64                 ) {
 65             public void onDrawerClosed(View view) {
 66                 getActionBar().setTitle(mTitle);
 67                 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
 68             }
 69
 70             public void onDrawerOpened(View drawerView) {
 71                 getActionBar().setTitle(drawerTitle);
 72                 invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
 73             }
 74         };
 75         drawerLayout.setDrawerListener(drawerToggle);
 76
 77         if (savedInstanceState == null) {
 78             selectItem(0);
 79         }
 80     }
 81
 82     @Override
 83     public boolean onCreateOptionsMenu(Menu menu) {
 84         MenuInflater inflater = getMenuInflater();
 85         inflater.inflate(R.menu.main, menu);
 86         return super.onCreateOptionsMenu(menu);
 87     }
 88
 89     /* Called whenever we call invalidateOptionsMenu() */
 90     @Override
 91     public boolean onPrepareOptionsMenu(Menu menu) {
 92         // If the nav drawer is open, hide action items related to the content view
 93         boolean drawerOpen = drawerLayout.isDrawerOpen(drawerList);
 94         menu.findItem(R.id.action_refresh).setVisible(!drawerOpen);
 95         return super.onPrepareOptionsMenu(menu);
 96     }
 97
 98     @Override
 99     public boolean onOptionsItemSelected(MenuItem item) {
100
101         if (drawerToggle.onOptionsItemSelected(item)) {
102             return true;
103         }
104
105         int id = item.getItemId();
106
107         switch (id) {
108         case R.id.action_share:
109             Toast.makeText(this, "分享", Toast.LENGTH_SHORT).show();
110             return true;
111         case R.id.action_share_email:
112             Toast.makeText(this, "邮件分享", Toast.LENGTH_SHORT).show();
113             return true;
114         case R.id.action_share_message:
115             Toast.makeText(this, "短信分享", Toast.LENGTH_SHORT).show();
116             return true;
117         case R.id.action_share_bluetooth:
118             Toast.makeText(this, "蓝牙分享", Toast.LENGTH_SHORT).show();
119             return true;
120         case R.id.action_share_system:
121             Toast.makeText(this, "系统分享", Toast.LENGTH_SHORT).show();
122             return true;
123         case R.id.action_search:
124             Toast.makeText(this, "搜索", Toast.LENGTH_SHORT).show();
125             return true;
126         case R.id.action_search_user:
127             Toast.makeText(this, "搜索博主", Toast.LENGTH_SHORT).show();
128             return true;
129         case R.id.action_search_blog:
130             Toast.makeText(this, "搜索博文", Toast.LENGTH_SHORT).show();
131             return true;
132         case R.id.action_refresh:
133             Toast.makeText(this, "刷新", Toast.LENGTH_SHORT).show();
134             return true;
135         default:
136             return super.onOptionsItemSelected(item);
137         }
138     }
139
140     /* The click listner for ListView in the navigation drawer */
141     private class DrawerItemClickListener implements ListView.OnItemClickListener {
142         @Override
143         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
144             selectItem(position);
145         }
146     }
147
148     private void selectItem(int position) {
149         // update the main content by replacing fragments
150         Fragment fragment = null;
151         switch (position) {
152         case 0:
153             fragment = new HomeFragment();
154             break;
155         case 1:
156             fragment = new NewsFragment();
157             break;
158         case 2:
159             fragment = new BlogFragment();
160             break;
161         case 3:
162             fragment = new SettingFragment();
163             break;
164         case 4:
165             fragment = new AboutFragment();
166             break;
167         default:
168             fragment = new HomeFragment();
169             break;
170         }
171
172         FragmentManager fragmentManager = getFragmentManager();
173         fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
174
175         // update selected item and title, then close the drawer
176         drawerList.setItemChecked(position, true);
177         setTitle(drawerListTitles[position]);
178         drawerLayout.closeDrawer(drawerList);
179     }
180
181     @Override
182     public void setTitle(CharSequence title) {
183         mTitle = title;
184         getActionBar().setTitle(mTitle);
185     }
186
187     /**
188      * When using the ActionBarDrawerToggle, you must call it during
189      * onPostCreate() and onConfigurationChanged()...
190      */
191
192     @Override
193     protected void onPostCreate(Bundle savedInstanceState) {
194         super.onPostCreate(savedInstanceState);
195         // Sync the toggle state after onRestoreInstanceState has occurred.
196         drawerToggle.syncState();
197     }
198
199     @Override
200     public void onConfigurationChanged(Configuration newConfig) {
201         super.onConfigurationChanged(newConfig);
202         // Pass any configuration change to the drawer toggls
203         drawerToggle.onConfigurationChanged(newConfig);
204     }
205 }

源码:[email protected]:ZhangTingkuo/Cnblogs.git

Android 博客园客户端 (一) 基本界面,布布扣,bubuko.com

时间: 2024-10-14 10:41:26

Android 博客园客户端 (一) 基本界面的相关文章

Android 博客园客户端 (二) 新界面&amp;部分功能

重新创建项目(Android 4.2.2+):https://github.com/ZhangTingkuo/AndroidCnblogs.git 原项目(Android 4.1.2+):https://github.com/ZhangTingkuo/Cnblogs.git 原项目的界面看着很不爽,就只写了部分功能,然后决定重新设计界面,并把这部分功能添加进来,然后继续进行开发. 已经完成博客列表部分的显示 第一次做一个android项目,只为兴趣. 很多东西看起来貌似很简单,但是真的做的时候就

Android 博客园客户端 (六) OnItemLongClickListener for Blog, News and Comment

项目地址:https://github.com/ZhangTingkuo/AndroidCnblogs 为博客.新闻.评论界面的ListView添加长按事件,一边快速转到相应的页面. 1. 博客:查看内容.查看评论.查看作者. 2. 新闻:查看内容.查看评论. 3. 评论:引用.回复.(功能暂未实现) 1 package com.arlen.cnblogs.view; 2 3 import java.io.UnsupportedEncodingException; 4 import java.n

Android 博客园客户端 (八) 下拉刷新、分页,AsyncTask

一直以来,无论是博客.新闻.还是推荐用户列表.只能加载固定的数量,也没有刷新功能. 为了实现这个功能,也试过很多第三方的开源控件,如PullToRefreshListVie等.无意中发现了Google官方发布了一个新的控件(SwipeRefreshLayout),支持下拉刷新,这个控件在Google应用中都有出现过.效果也是非常的不错. 具体的使用方法及代码如下: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/r

Android 博客园客户端 (四) 基本功能完成(博客列表和内容、新闻列表和内容、推荐博主)

项目地址:https://github.com/ZhangTingkuo/AndroidCnblogs.git APK:http://files.cnblogs.com/zhangtingkuo/AndroidCnblogs.apk 基本功能已经完成,但是不懂优化.经常会闪退,正在一点一点解决. 还有就是很多不懂得问题想在这里请教一下各位大神,希望能得到一些指点: 1.博客.新闻的显示,应该使用哪种控件?这里使用的是TextView,而且没有图片的显示,感觉非常不友好.是不是应该使用WebVie

Android 博客园客户端 (三) 博客列表和内容显示

项目地址:https://github.com/ZhangTingkuo/AndroidCnblogs.git 经过很多天的努力,终于完成了博客界面的三个Fragment列表显示,分别是,首页.推荐.阅读排行.其实,距离上次,并没有增加更多的功能. 下一步,添加新闻界面的列表和内容显示.

【Android】Android 博客园客户端 (七)登录功能

如题,不过只是简单的登录功能,登录成功以后可以进行的操作还没有进行实现. 登录的原理主要是获取Cookies,数据保存在数据库中.使用HttpClient模拟登录的方式已经在另一篇博客中写过,这里就不再赘述. 博客地址:http://www.cnblogs.com/zhangtingkuo/p/3968450.html 登录的流程如图所示: 代码非常简单: SplashActivity: 1 if (Personal.isLogin(this)) { 2 Config.FLAG_LOGIN =

Android 博客园客户端 (七)登录功能

如题,不过只是简单的登录功能,登录成功以后可以进行的操作还没有进行实现. 登录的原理主要是获取Cookies,数据保存在数据库中.使用HttpClient模拟登录的方式已经在另一篇博客中写过,这里就不再赘述. 博客地址:http://www.cnblogs.com/zhangtingkuo/p/3968450.html 登录的流程如图所示: 代码非常简单: SplashActivity: 1 if (Personal.isLogin(this)) { 2 Config.FLAG_LOGIN =

Android 博客园客户端 (五) 查看评论、搜索博主

项目地址:https://github.com/ZhangTingkuo/AndroidCnblogs 1.查看评论 // 获取文章评论 public static final String BLOGS_COMMENTS = "http://wcf.open.cnblogs.com/blog/post/{POSTID}/comments/{PAGEINDEX}/{PAGESIZE}"; // 获取新闻评论 public static final String NEWS_COMMENTS

用Qt写软件系列六:博客园客户端的设计与实现(用Fiddler抓包,用CURL提交数据,用htmlcxx解析HTML)

引言 博客园是本人每日必逛的一个IT社区.尽管博文以.net技术居多,但是相对于CSDN这种业务杂乱.体系庞大的平台,博客园的纯粹更得我青睐.之前在园子里也见过不少讲解为博客园编写客户端的博文.不过似乎都是移动端的技术为主.这篇博文开始讲讲如何在PC端编写一个博客园客户端程序.一方面是因为本人对于博客园的感情:另一方面也想用Qt写点什么东西出来.毕竟在实践中学习收效更快. 登录过程分析 登录功能是一个客户端程序比不可少的功能.在组装Http数据包发送请求之前,我们得看看整个登录是怎样一个过程.F