人人网SDK Demo项目学习 1 全局标题栏

最近做了很多sns开发平台分享的东西,说一下自己的观点

1.新浪微博2.0 最差 无论是demo还是文档还是sdk的维护,各种问题 ,和1.0没法比,怀疑新浪到底还想不想开放了,好歹也是个大公司,居然写出那么恶心的代码


2.腾讯1.0也很差,但是腾讯2.0不错(不得不承认人家的技术实例),只是权限很少,功能也不多,很多东西可能要自己解析json 自己写网络逻辑.其实最恶心的还是权限,现在发个说说的权限都要申请.不要建议我用腾讯微博接入,有人用吗?


3.人人sdk 功能比较全面,架构也很好,可能好像人人是这个三个中最不是很普及的.正应了某个人人职员的话 

"人人不是腾讯百度他们那么多的项目,每个人都会真正参与进去的"

这可能也暗示人人的专注一些吧.


看了人人的sdk感觉自己可以学习很多东西,现在整理如下

人人网SDK Demo项目学习 1  全局标题栏

人人的全局标题栏使用BaseActivity实现,其他用到标题栏的都继承他,

其他优点:

方便在BaseActivity中处理一些UI操作,比如显示toast等,

获取手机IMEI等的 需要使用context的方法 就不用各种传递context了.

BaseActivity的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/renren_demo_root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/main_bg"
    android:orientation="vertical" >

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/renren_demo_titlebar"
        android:layout_width="fill_parent"
        android:layout_height="50dip"
        android:background="@drawable/renren_demo_titlebar_background"
        android:paddingBottom="10dip"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:paddingTop="10dip" >

        <Button
            android:id="@+id/renren_demo_titlebar_left_button"
            android:layout_width="60dip"
            android:layout_height="40dip"
            android:layout_alignParentLeft="true"
            android:background="@drawable/renren_demo_titlebar_left_button"
            android:text="返回"
            android:textColor="#FFFFFF"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/renren_demo_titlebar_title_text"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center"
            android:text=""
            android:textColor="#FFFFFF"
            android:textSize="20sp" />

        <Button
            android:id="@+id/renren_demo_titlebar_right_button"
            android:layout_width="60dip"
            android:layout_height="40dip"
            android:layout_alignParentRight="true"
            android:background="@drawable/renren_demo_titlebar_right_button"
            android:text="查看Log"
            android:textColor="#FFFFFF"
            android:textSize="14sp" />
    </RelativeLayout>

</LinearLayout>


BaseActivity代码(增加了一个获取设备ID方法)

/**
 * $id$
 */
package com.renren.api.connect.android.demo.activity;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.renren.api.connect.android.Renren;
import com.renren.api.connect.android.demo.R;

/**
 * Base class for request Activity in the demo application
 * 
 * @author Shaofeng Wang (shaofeng.wang@renren-inc.com)
 */
public class BaseActivity extends Activity {
	/**
	 * 根布局对象,用于在将来的子类中添加内容布局
	 */
	protected LinearLayout root;

	/**
	 * 标题栏左边按钮
	 */
	protected Button titlebarLeftButton;

	/**
	 * 标题栏中间文字
	 */
	protected TextView titlebarText;

	/**
	 * 标题栏右边按钮
	 */
	protected Button titlebarRightButton;

	private ProgressDialog progressDialog;

	/**
	 * 调用SDK接口的Renren对象
	 */
	protected Renren renren;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 设置不显示标题栏
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 设置布局
		setContentView(R.layout.base_layout);
		// 初始化控件
		root = (LinearLayout) findViewById(R.id.renren_demo_root);
		titlebarLeftButton = (Button) findViewById(R.id.renren_demo_titlebar_left_button);
		titlebarRightButton = (Button) findViewById(R.id.renren_demo_titlebar_right_button);
		titlebarText = (TextView) findViewById(R.id.renren_demo_titlebar_title_text);

		// 注册“查看Log”按钮事件
		titlebarRightButton.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(BaseActivity.this, LogActivity.class);
				BaseActivity.this.startActivity(intent);
			}
		});

		// 注册“返回”按钮事件(子类若有不同的处理,则需覆盖此事件)
		titlebarLeftButton.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				finish();
			}
		});

		Intent intent = getIntent();
		renren = intent.getParcelableExtra(Renren.RENREN_LABEL);
		if (renren != null) {
			renren.init(this);
		}
	}

	/**
	 * 解析逗号分割的字符串
	 * 
	 * @return
	 */
	protected String[] parseCommaIds(String s) {
		if (s == null) {
			return null;
		}
		String[] ids = s.split(",");
		return ids;
	}

	/**
	 * 显示等待框
	 */
	protected void showProgress() {
		showProgress("Please wait", "progressing");
	}

	/**
	 * 显示等待框
	 * 
	 * @param title
	 * @param message
	 */
	protected void showProgress(String title, String message) {
		progressDialog = ProgressDialog.show(this, title, message);
	}

	/**
	 * 取消等待框
	 */
	protected void dismissProgress() {
		if (progressDialog != null) {
			try {
				progressDialog.dismiss();
			} catch (Exception e) {

			}
		}
	}

	/**
	 * 显示Toast提示
	 * 
	 * @param message
	 */
	protected void showTip(String message) {
		Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		// 不销毁ProgressDialog会出现view not attached to window manager异常
		dismissProgress();
	}

	protected String getDeviceId() {//获取设备ID
		TelephonyManager tm = (TelephonyManager) this
				.getSystemService(Context.TELEPHONY_SERVICE);
		return tm.getDeviceId();

	}
}


测试一下

package com.renren.api.connect.android.demo;

import com.renren.api.connect.android.demo.activity.BaseActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;

public class TestActivity extends BaseActivity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		LinearLayout mainLayout = (LinearLayout) getLayoutInflater().inflate(
				R.layout.main, null);
		root.addView(mainLayout);// 继承了BaseActivity
									// 想要再次添加布局就要使用这个方法了,如果在使用setContentView()就会把父类定义的标题栏覆盖了
		titlebarRightButton.setOnClickListener(new View.OnClickListener() {// 重写BaseActivity的方法,改变他的事件

					@Override
					public void onClick(View v) {
						showProgress();

					}
				});
		showTip("测试" + getDeviceId());

	}
}



posted @ 2012-10-13 10:37  sfshine  阅读(329)  评论(0编辑  收藏  举报