Android入门/TabHost(十二)

TabHost

extends FrameLayout
implements ViewTreeObserver.OnTouchModeChangeListener
java.lang.Object
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.FrameLayout
         ↳ android.widget.TabHost

类概述

一个窗口视图的容器。
这个对象包含两个孩子:一个标签页标签,用户点击来选择一个特定的标签,显示该网页的内容,一个FrameLayout对象。
个别元素通常是控制使用这个容器中的对象,而不是设置子元素本身的值。

TabHost API 传送: http://developer.android.com/reference/android/widget/TabHost.html
TabHost控件可以达到分页的效果
Android入门/TabHost(十二)_第1张图片



UI 布局 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<TabHost	
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   	xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"> 
    
    <TabWidget android:id="@android:id/tabs"  
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">  
	</TabWidget>  
    
    <FrameLayout 
        android:id="@android:id/tabcontent"  
        android:paddingTop="65dp" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"> 
        
        
        <LinearLayout 
            android:layout_height="wrap_content" 
            android:id="@+id/Tab1" 
            android:orientation="horizontal" 
            android:layout_width="fill_parent">  
	              <Button 
		               android:layout_width="fill_parent" 
		               android:layout_height="wrap_content" 
		               android:id="@+id/btnTab1"
		               android:layout_weight="2"
		               android:text="Tab1">
		           </Button>  
		           <EditText 
		                android:layout_height="wrap_content" 
		                android:id="@+id/edtTab1" 
		                android:layout_weight="1"
		                android:textAppearance="@android:attr/autoCompleteTextViewStyle"
		                android:layout_width="fill_parent" 
		                android:inputType="none">               
		           </EditText>  
		         
        </LinearLayout>  
        <LinearLayout 
             android:layout_height="wrap_content" 
             android:id="@+id/Tab2"
             android:layout_width="fill_parent" 
             android:orientation="horizontal">  
		            
			 <GridView
			     xmlns:android="http://schemas.android.com/apk/res/android"
			     android:id="@+id/gridview"
			     android:layout_width="fill_parent"
			     android:layout_height="fill_parent"
			     android:numColumns="auto_fit"
			     android:verticalSpacing="10dp"
			     android:listSelector="@drawable/ic_launcher"
			     android:horizontalSpacing="10dp"
			     android:columnWidth="90dp"
			     android:stretchMode="columnWidth"
			     android:gravity="center" 
			/>
            
           </LinearLayout>  
           
         <RelativeLayout 
             android:layout_height="wrap_content" 
             android:id="@+id/Tab3"
             android:layout_width="fill_parent" 
             android:orientation="horizontal">  
		             <EditText
		                 android:layout_width="fill_parent" 
		                 android:layout_height="wrap_content"
	                     android:textAppearance="@android:attr/autoCompleteTextViewStyle"
		                 android:id="@+id/edtTab3"
		                 android:inputType="none">    
		             </EditText>  
			        <ImageButton 
			            android:id="@+id/imgbtn3"
			            android:layout_width="fill_parent"
			            android:layout_height="wrap_content"
			            android:src="@drawable/ai"
			            android:layout_below="@id/edtTab3"
			            android:contentDescription="@string/app_name"/>
           </RelativeLayout>  
        </FrameLayout>   
</TabHost>

night.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:paddingBottom="4dp"
    android:layout_width="fill_parent" >
    
    <ImageView 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/ItemImage"
        android:layout_centerHorizontal="true">
    </ImageView>
    <TextView   
               android:layout_width="wrap_content"   
               android:layout_below="@+id/ItemImage"   
               android:layout_height="wrap_content"   
               android:text="TextView"   
               android:layout_centerHorizontal="true"   
               android:id="@+id/ItemText">  
    </TextView>  
    
    
</RelativeLayout>

Java代码
public class MainActivity extends TabActivity {	// TabActivity

	private Button btnTab1;
	private ImageButton imgbtn3;
	private EditText edtTab1,edtTab3;
	public Context context;
	public simple simpleAdapter;
	private GridView gridview;
	private final static String TAB1 = "tab1";
	private final static String TAB2 = "tab2";
	private final static String TAB3 = "tab3";
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreUIInit();
        UIInit();
        PostUIInit(); 
        Night();
    }

    private void PreUIInit()
    {
    	setContentView(R.layout.activity_main);
    	// 得到TabHost对象
    	TabHost tabs = getTabHost();
    	//设置Tab1  
    	TabSpec tab1 = tabs.newTabSpec(TAB1);
    	tab1.setIndicator(TAB1);
    	tab1.setContent(R.id.Tab1); // Tab1 --> LinearLayout  @+id/Tab1
    	tabs.addTab(tab1);
    	 //设置Tab2  
        TabSpec tab2 = tabs.newTabSpec(TAB2);  
        tab2.setIndicator(TAB2);        
        tab2.setContent(R.id.Tab2);      
        tabs.addTab(tab2);  
        //设置Tab3 
        TabSpec tab3 = tabs.newTabSpec(TAB3);
        tab3.setIndicator(TAB3);
        tab3.setContent(R.id.Tab3);
        tabs.addTab(tab3);
    }
    
    private void UIInit()
    {
    	// tab1
	    btnTab1=(Button)this.findViewById(R.id.btnTab1);  
        edtTab1=(EditText)this.findViewById(R.id.edtTab1);  
        // tab3
        imgbtn3=(ImageButton)this.findViewById(R.id.imgbtn3);  
        edtTab3=(EditText)this.findViewById(R.id.edtTab3);  
    }
    
    private void PostUIInit()
    {
    	btnTab1.setOnClickListener(listener);
    	imgbtn3.setOnClickListener(listener);
    }
    
    private OnClickListener listener = new OnClickListener() 
    {
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.btnTab1:
				edtTab1.setText(TAB1);
				break;
			case R.id.imgbtn3:
				edtTab3.setText(TAB3);
				break;
			}
			
		}
	};
	
    
    private void Night()
    {
		
				/** 1. 处理好数据 , 生成动态数组	*/		
				gridview = (GridView)findViewById(R.id.gridview);
			
				ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
				for(int i=0;i<9;i++)
				{
					HashMap<String, Object> map = new HashMap<String, Object>();
					map.put("ItemImage", R.drawable.ic_action_search);
					map.put("ItemText", "No."+i);
					//添加到动态数组
					list.add(map);
				}
				
				/**  2. 生成适配器 	 */			
				simpleAdapter = new simple(this, 
							list,					//数据源
							R.layout.night,			//Items 布局
							new String[]{"ItemImage","ItemText"},// 动态数组list 对应的子项的名称
							new int[]{R.id.ItemImage,R.id.ItemText}// night.xml 内对应组件的id
				);
				
		    	/** 3. gridview添加并且显示
		    	    4.添加消息处理
		    	*/
		    	gridview.setAdapter(simpleAdapter);
				gridview.setOnItemClickListener(Itemlistener);
    		
    }
	// OnItemClickListener 事件处理
	private OnItemClickListener Itemlistener = new OnItemClickListener() {

		public void onItemClick(AdapterView<?> parent, 	//AdapterView被点击时发生
								View view, 				//AdapterView内被点击的视图
								int position,			//适配器中的位置的视图
								long id)				//被点击的项行的id
		 {
				@SuppressWarnings("unchecked")
				HashMap<String, Object> item = (HashMap<String, Object>)parent.getItemAtPosition(position);
			    //显示所选Item的ItemText  
				setTitle((String)item.get("ItemText"));
				
				Log.v("ONITEMCLICK","position = "+position);
				simpleAdapter.setSelected(position);
				//simpleAdapter.setContext(context);
		 }
		
	};
	
	/** 内部类  Adapter*/
	public  class simple extends SimpleAdapter{
		
		private List<HashMap<String, Object>> list;
		private int selected = -1;
		//private Context context;
		// 继承父类的构造
		public simple(Context context, List<HashMap<String, Object>> data,
				int resource, String[] from, int[] to) 
		{
			super(context, data, resource, from, to);	
			this.list = data;
		}
		// 获取当前点击的位置
		public void setSelected(int position)
		{
			this.selected = position;
			notifyDataSetChanged();
			Toast.makeText(MainActivity.this, "selected = "+selected, Toast.LENGTH_SHORT).show();
		}
			
		// 获得Items的数量
		public int getCount() 
		{	
			return this.list.size();
		}

		// 根据ListView位置返回View
		public Object getItem(int position)
		{
			return this.list.get(position);
		}

		// 根据ListView位置得到List中的ID
		public long getItemId(int position) 
		{
			return position;
		}
		//	根据位置得到View对象	3个参数[  List中的ID ],[ Items的视图  ],[  父类的视图  ]
		public View getView(int position, View convertView,ViewGroup parent) 
		{
			Log.v("getView", "position = "+position);
			
		
			if(selected == position)
			{
				// 大致作用是 绑定 layout布局文件 ,和findViewById差不多作用,只是一个是找Widget控件 ,一个是找Layout布局文件
				 LayoutInflater inflater =  (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
				 convertView = inflater.inflate(R.layout.night, null);
				 
				 ImageView img = (ImageView)convertView.findViewById(R.id.ItemImage);
				 img.setImageResource(R.drawable.ic_launcher);  

				 TextView text = (TextView)convertView.findViewById(R.id.ItemText);
				 text.setText(R.string.app_name);
				 
				 return convertView;
			}
			return super.getView(position, convertView, parent);
		}
		

	} 
    
}






你可能感兴趣的:(Android入门/TabHost(十二))