当前位置:  编程技术>移动开发
本页文章导读:
    ▪实现屏幕上方展示的TAB分页        实现屏幕下方展示的TAB分页 这篇博客是参考helloandroid兄的腾讯微博应用,我整理了一下。完整项目的介绍请在http://helloandroid.iteye.com/看首先是效果图:我把helloandroid兄的源代码整理了一下.........
    ▪ Hashmap不能用根本的数据类型 Dimensions expected after this token        Hashmap不能用基本的数据类型 Dimensions expected after this token 今天试了一下HahsMap, 采用如下形似定义 (这个下面是用了csdn的一位同仁的文章,仅作为讲解参考,请见谅) HashMap<int,String>.........
    ▪ Maven 创办工程       Maven 创建工程 Maven 创建工程1、普通工程maven-archetype-quickstart2、webapp工程maven-archetype-webapp ......

[1]实现屏幕上方展示的TAB分页
    来源: 互联网  发布时间: 2014-02-18
实现屏幕下方展示的TAB分页
这篇博客是参考helloandroid兄的腾讯微博应用,我整理了一下。完整项目的介绍请在http://helloandroid.iteye.com/看

首先是效果图:


我把helloandroid兄的源代码整理了一下,并梳理了涉及到的知识点,总结如下:

1、TabActivity的使用
public class MainActivity extends TabActivity {

	private TabHost tabHost;

	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tabHost = getTabHost();
		populateTab();

	}

	/**
	 * 组装tab控件
	 */
	private void populateTab() {

		Resources res = getResources();

		populateTabItem(R.drawable.tab_home_selector,
				res.getString(R.string.tab_home), new Intent(this,
						HomeActivity.class));
		populateTabItem(R.drawable.tab_atme_selector,
				res.getString(R.string.tab_refer), new Intent(this,
						ReferActivity.class));
		populateTabItem(R.drawable.tab_message_selector,
				res.getString(R.string.tab_secret), new Intent(this,
						MessageActivity.class));
		populateTabItem(R.drawable.tab_explore_selector,
				res.getString(R.string.tab_search), new Intent(this,
						SearchActivity.class));
		populateTabItem(R.drawable.tab_focus_selector,
				res.getString(R.string.tab_attention), new Intent(this,
						AttentionActivity.class));

	}

	/**
	 * 生成tab_item
	 * 
	 * @param imageResourceSelector
	 *            图片选择器
	 * @param text
	 *            文本
	 * @param intent
	 *            intent
	 */
	private void populateTabItem(int imageResourceSelector, String text,
			Intent intent) {

		View view = View.inflate(this, R.layout.tab_item, null);// 拼装view
		((ImageView) view.findViewById(R.id.tab_item_imageview))
				.setImageResource(imageResourceSelector);
		((TextView) view.findViewById(R.id.tab_item_textview)).setText(text);

		TabSpec spec = tabHost.newTabSpec(text).setIndicator(view)
				.setContent(intent);// 将view注入spec
		tabHost.addTab(spec);

	}

}

<?xml version="1.0" encoding="UTF-8"?>

<TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent"
	android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

	<RelativeLayout android:orientation="vertical"
		android:layout_width="fill_parent" android:layout_height="fill_parent">

		<include android:id="@+id/head_line" layout="@layout/head_line"
			android:layout_width="fill_parent" android:layout_height="wrap_content" />

		<FrameLayout android:id="@android:id/tabcontent"
			android:layout_below="@id/head_line" android:layout_width="fill_parent"
			android:layout_height="fill_parent" android:layout_weight="1.0" />

		<TabWidget android:id="@android:id/tabs" android:background="@drawable/tab_bkg"
			android:layout_gravity="bottom" android:layout_height="60.0dip"
			android:layout_width="fill_parent" android:fadingEdge="none"
			android:fadingEdgeLength="0.0px" android:paddingLeft="0.0dip"
			android:paddingTop="2.0dip" android:paddingRight="0.0dip"
			android:paddingBottom="0.0dip" android:layout_alignParentBottom="true"
			android:layout_alignParentTop="false" />

	</RelativeLayout>

</TabHost>

可以看到,TabActivity是继承自Activity,包含了一个TabHost组件。TabHost组件则是继承自FrameLayout的ViewGroup。

TabHost组件本身的id必须是@android:id/tabhost,它必须包含一个FrameLayout,并且该FrameLayout的id必须是@android:id/tabcontent,此外还要包含一个TabWidget,id是@android:id/tabs。

FrameLayout可以放置每个单独的Activity,而TabWidget则是每个Tab页签。默认第一个页签对应的Activity,会首先显示在FrameLayout里。然后每次点击其他的Tab页签,对应的Activity就会切换显示到FrameLayout里。这个有点类似html中的frameset的概念

2、在main.xml中有一行
<include android:id="@+id/head_line" layout="@layout/head_line"
			android:layout_width="fill_parent" android:layout_height="wrap_content" />

作用是引入另一个View文件,head_line.xml
<RelativeLayout android:background="@drawable/header"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	xmlns:android="http://schemas.android.com/apk/res/android">

	<Button android:id="@+id/top_btn_left" android:textColor="@color/button_text_selector"
		android:background="@drawable/top_refresh_selector"
		android:layout_width="wrap_content" android:layout_height="wrap_content"
		android:layout_marginLeft="12.0dip" android:layout_alignParentLeft="true"
		android:layout_centerVertical="true" />

	<Button android:id="@+id/top_btn_right" android:textColor="@color/button_text_selector"
		android:background="@drawable/top_edit_selector" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:layout_marginRight="12.0dip"
		android:layout_alignParentRight="true" android:layout_centerVertical="true" />

	<TextView android:id="@+id/top_title" android:textSize="22.0sp"
		android:textColor="@color/head_line_text" android:ellipsize="middle"
		android:gravity="center_horizontal" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="@string/user_name"
		android:singleLine="true" android:layout_toLeftOf="@id/top_btn_right"
		android:layout_toRightOf="@id/top_btn_left"
		android:layout_centerInParent="true"
		android:layout_alignWithParentIfMissing="true" />

</RelativeLayout>

用这种方式可以实现View组件的复用,是很方便的,可以学习一下这种方式。把要复用的View写在单独的xml文件里,然后在其他需要的地方,只要直接include就可以了

3、每个Tab页签对应的View是tab_item.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout android:orientation="vertical"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	xmlns:android="http://schemas.android.com/apk/res/android">

	<ImageView android:id="@+id/tab_item_imageview"
		android:layout_width="fill_parent" android:layout_height="32.0dip"
		android:scaleType="fitCenter" />

	<TextView android:id="@+id/tab_item_textview"
		android:layout_width="fill_parent" android:layout_height="wrap_content"
		android:gravity="center" android:singleLine="true"
		android:marqueeRepeatLimit="1" android:textSize="11.0sp"
		android:ellipsize="marquee" />

</LinearLayout>

然后在java代码中进行组装
View view = View.inflate(this, R.layout.tab_item, null);// 拼装view
		((ImageView) view.findViewById(R.id.tab_item_imageview))
				.setImageResource(imageResourceSelector);
		((TextView) view.findViewById(R.id.tab_item_textview)).setText(text);

		TabSpec spec = tabHost.newTabSpec(text).setIndicator(view)
				.setContent(intent);// 将view注入spec
		tabHost.addTab(spec);

这部分的详细说明,可以看google提供的API

4、然后这个页面中用到了selector的概念,即当要动态改变某些组件的属性,如颜色,字体大小等,可以用selector来进行动态选择,这里有点类似CSS中的伪类的概念
android:textColor="@color/button_text_selector"

<?xml version="1.0" encoding="UTF-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

	<item android:state_pressed="true" android:color="@color/button_text_pressed" />

	<item android:state_selected="true" android:color="@color/button_text_pressed" />

	<item android:color="@color/button_text_normal" />

</selector>

上面代码的意思是,根据按钮控件是否按下,是否选择,在运行时动态决定颜色。通过同样的方式,还可以动态决定一个按钮的图片
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/top_edit_normal" />
    <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/top_edit_press" />
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/top_edit_normal" />
    <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/top_edit_press" />
    <item android:state_pressed="true" android:drawable="@drawable/top_edit_press" />
</selector>

5、这个页面还用到了一个比较特殊的技巧,就是通过xml,而不是静态图片来绘制背景
<RelativeLayout android:background="@drawable/header"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	xmlns:android="http://schemas.android.com/apk/res/android">

上面代码中的android:background="@drawable/header",指向drawable文件夹中的header.xml
<?xml version="1.0" encoding="UTF-8"?>

<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">

	<gradient android:startColor="#ff6c7078" android:endColor="#ffa6abb5"
		android:angle="270.0" android:type="linear" />

</shape>

可以看到,这个控件的背景色,是用xml绘制出来的。不过这个技巧我在别的地方见的比较少,感觉比较冷门

关于TabHost组件的知识点,就简单介绍这些。详细的内容,请到helloandroid.iteye.com里看

    
[2] Hashmap不能用根本的数据类型 Dimensions expected after this token
    来源: 互联网  发布时间: 2014-02-18
Hashmap不能用基本的数据类型 Dimensions expected after this token

今天试了一下HahsMap,
采用如下形似定义
(这个下面是用了csdn的一位同仁的文章,仅作为讲解参考,请见谅)
  • HashMap<int,String> map=new HashMap<int,String>();  
  • map.put(1,"a");  
  • map.put(2,"b");  
  • map.put(1,"aq");  
  • System.out.println(map.get(0));  
  • System.out.println(map.get(1));  
  • System.out.println(map.get(2));  

  • 报错:Syntax error on token "int", Dimensions expected after this token


    原因:引用类型和原始类型没有搞清楚!

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

    原始类型   封装类

    boolean      Boolean

    char           Character

    byte           Byte

    short          Short

    int              Integer

    long           Long

    float           Float

    double      Double

    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。


  • HashMap<Integer,String> map=new HashMap<Integer,String>();  
  • map.put(1,"a");  
  • map.put(2,"b");  
  • map.put(1,"aq");  
  • System.out.println(map.get(0));  
  • System.out.println(map.get(1));  
  • System.out.println(map.get(2));  

  •     
    [3] Maven 创办工程
        来源: 互联网  发布时间: 2014-02-18
    Maven 创建工程
    Maven 创建工程
    1、普通工程
    maven-archetype-quickstart

    2、webapp工程
    maven-archetype-webapp


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3