zoukankan      html  css  js  c++  java
  • Android之Composite

    一、listView控件

    1.使用listview对数据进行简单的绑定,这里使用Arrayadater适配器进行简单的数据绑定

    image

    public class MainActivity extends Activity {
        private ListView listView;
        private ArrayAdapter<String> adapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView=(ListView)this.findViewById(R.id.listView1);
            adapter=new ArrayAdapter<String>(MainActivity.this, 
                    android.R.layout.simple_list_item_1, getDataSourece());
            listView.setAdapter(adapter);
        }
    
        public List<String> getDataSourece() {
            List<String> list=new ArrayList<String>();
            for(int i =0;i<30;i++){
                
                list.add("bibly"+i);
            }
            return list;
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
    }

    2.自定义listview控件

    image使用SimpleAdapter+ListView

    SimpleAdapter其中一个构造函数如下:

    public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
        第一个参数:当前上下文对象。第二个参数:一个List类型的泛型集合,泛型类型必须继承之Map类型。第三个:布局资源的ID,

    第四个参数:需要绑定的Key列表。第五个参数:与Key列表项对应的资源文件中的具体组件ID集合。

    自定义一个布局文件image.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      
      <ImageView    
         android:layout_width="wrap_content"    
         android:layout_height="wrap_content"   
         android:id="@+id/img">    
      </ImageView>  
      
      
      <TextView
       android:id="@+id/txtName"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
      >
      </TextView>
      
      <TextView
       android:paddingLeft="20sp"
       android:id="@+id/txtLength"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
      >
      </TextView>
      
    </LinearLayout>
    package com.example.mytestxml;
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.example.mytestxml.R.id;
    import com.example.mytestxml.R.string;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    
    public class MainActivity extends Activity {
        private ListView listView;
        private ArrayAdapter<String> adapter;
        private Button button;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView=(ListView)this.findViewById(R.id.listView1);
            button=(Button)this.findViewById(R.id.button1);
            button.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                       String []from={"img","name","length"};
                         int[]to={R.id.img,R.id.txtName,R.id.txtLength};
                         SimpleAdapter adapter=new SimpleAdapter(MainActivity.this,getData(),
                                 R.layout.image, from, to);
                         listView.setAdapter(adapter);  
                }
            });
            adapter=new ArrayAdapter<String>(MainActivity.this, 
                    android.R.layout.simple_list_item_1, getDataSourece());
            listView.setAdapter(adapter);
        }
        public List<Map<String, Object>> getData() {
            List<Map<String,Object>> lists=new ArrayList<Map<String,Object>>();
            for(int i=0;i<4;i++){
                Map<String,Object> map=new HashMap<String,Object>();
                map.put("img", R.drawable.ic_launcher);
                map.put("name", "SimpleAdapter"+i);
                map.put("length", "300");
                lists.add(map);
            }
            return lists;
        }
        public List<String> getDataSourece() {
            List<String> list=new ArrayList<String>();
            for(int i =0;i<30;i++){
                
                list.add("bibly"+i);
            }
            return list;
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
    }

    3.使用SimpleAdapter

    activity_main.xml下更改代码

    <?xml version="1.0" encoding="utf-8"?>  
      
    <LinearLayout   
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="horizontal"   
        android:layout_width="match_parent"  
        android:layout_height="match_parent">  
      
         <ImageView android:id="@+id/picture"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_margin="5dip"/>  
      
        <LinearLayout android:orientation="vertical"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content">  
      
            <TextView android:id="@+id/title"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:textColor="#16CCDD"  
                android:textSize="22sp" />  
      
            <TextView android:id="@+id/info"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:textColor="#666666"  
                android:textSize="16sp" />  
        </LinearLayout>  
       
    </LinearLayout>

    更改MainActivity.java

    public class MainActivity extends ListActivity  {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            SimpleAdapter adapter = new SimpleAdapter(this,getData(),  
                    R.layout.activity_main,  
                    new String[]{"title","info","picture"},  
                    new int[]{R.id.title,R.id.info,R.id.picture});  
           setListAdapter(adapter);
        }
        private List<Map<String, Object>> getData() {  
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
            Map<String, Object> map = new HashMap<String, Object>();  
            map.put("title", "图片");  
            map.put("info", "美辰良景,给你无限的遐思,让人感觉无限温馨……");  
            map.put("picture", R.drawable.ic_launcher);  
            list.add(map);  
      
            map = new HashMap<String, Object>();  
            map.put("title", "音乐");  
            map.put("info", "轻曼音乐,令人如入仙境,如痴如醉……");  
            map.put("picture", R.drawable.ic_launcher);  
            list.add(map);  
      
            map = new HashMap<String, Object>();  
            map.put("title", "视频");  
            map.put("info", "震撼场景,360度的视觉捕获,一览无遗……");  
            map.put("picture", R.drawable.ic_launcher);  
            list.add(map);  
            return list;  
        }   
    }

    注意这里的MainActivity extends ListActivity ,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。

    4.使用SimpleAdapter+ListView读取xml数据并访问(使用dom解析的方式读取xml数据)

    定义的xml数据

    <?xml version="1.0" encoding="utf-8"?>
    <channel>
    <item id="0" url="http://www.baidu.com">百度</item>
    <item id="1" url="http://www.qq.com">腾讯</item>
    <item id="2" url="http://www.sina.com.cn">新浪</item>
    <item id="3" url="http://www.taobao.com">淘宝</item>
    </channel>

    定义对应的类来读取数据

    public class channel {
        
        private String id;
        private String url;
        private String name;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    
    }

    定义读取xml读取数据的类(使用Dom方式)

    ublic class DomParserHelper {
        
        public static List<channel> getChannelList(InputStream stream)
        {
            List<channel> list=new ArrayList<channel>();
            
            //得到 DocumentBuilderFactory 对象, 由该对象可以得到 DocumentBuilder 对象
            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            
            try {
                //得到DocumentBuilder对象
                DocumentBuilder builder=factory.newDocumentBuilder();
                //得到代表整个xml的Document对象
                Document document=builder.parse(stream);
                //得到 "根节点" 
                Element root=document.getDocumentElement();
                //获取根节点的所有items的节点
                NodeList items=root.getElementsByTagName("item");  
                //遍历所有节点
                for(int i=0;i<items.getLength();i++)
                {
                    channel chann=new channel();
                    Element item=(Element)items.item(i);
                    chann.setId(item.getAttribute("id"));
                    chann.setUrl(item.getAttribute("url"));
                    chann.setName(item.getFirstChild().getNodeValue());
                    list.add(chann);
                }
                
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return list;
        }
    
    }
    private List<Map<String, String>> getData2() {
            List<Map<String, String>> list = new ArrayList<Map<String, String>>();
            InputStream stream = getResources().openRawResource(R.raw.channels);
            List<channel> channlist = DomParserHelper.getChannelList(stream);
    
            for (int i = 0; i < channlist.size(); i++) {
                Map<String, String> map = new HashMap<String, String>();
                channel chann = (channel) channlist.get(i);
                map.put("id", chann.getId());
                map.put("url", chann.getUrl());
                map.put("name", chann.getName());
                list.add(map);
            }
    
            return list;
        }
    button2.setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                     String []from={"id","name","url"};
                     int[]to={R.id.id,R.id.name,R.id.url};
                    SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,getData2(),
                             R.layout.myxml, from, to);
                      listView.setAdapter(adapter);  
                }
            });

    二、GridView控件

    activity_main.xml文件

    <?xml version="1.0" encoding="utf-8"?>    
      
    <GridView   
        xmlns:android="http://schemas.android.com/apk/res/android"     
        android:id="@+id/gridview"    
        android:layout_width="match_parent"     
        android:layout_height="match_parent"    
        android:numColumns="auto_fit"    
        android:verticalSpacing="10dp"    
        android:horizontalSpacing="10dp"    
        android:columnWidth="90dp"    
        android:stretchMode="columnWidth"    
        android:gravity="center"    
    />

    添加grid.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="4dip" android:layout_width="fill_parent">    
             <ImageView     
                   android:layout_height="wrap_content"     
                   android:id="@+id/ItemImage"     
                   android:layout_width="wrap_content"     
                   android:layout_centerHorizontal="true">     
             </ImageView>    
             <TextView     
                   android:layout_width="wrap_content"     
                   android:layout_below="@+id/ItemImage"     
                   android:layout_height="wrap_content"     
                   android:text="TextView01"     
                   android:layout_centerHorizontal="true"     
                   android:id="@+id/ItemText">    
             </TextView>    
    </RelativeLayout>
    public class MainActivity extends Activity {  
      
        @Override  
        public void onCreate(Bundle savedInstanceState) {    
             super.onCreate(savedInstanceState);    
             setContentView(R.layout.activity_main);    
             GridView gridview = (GridView) findViewById(R.id.gridview);    
                  
             //生成动态数组,并且转入数据     
             ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();    
             for(int i=0;i<10;i++){    
                HashMap<String, Object> map = new HashMap<String, Object>();    
                map.put("ItemImage", R.drawable.ic_launcher);//添加图像资源的ID     
                map.put("ItemText", "NO."+String.valueOf(i));//按序号做ItemText     
                lstImageItem.add(map);    
              }    
              //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应     
              SimpleAdapter saImageItems = new SimpleAdapter(this,   
                                                        lstImageItem,//数据来源      
                                                        R.layout.grid,//grid的XML实现     
                                                            
                                                        //动态数组与ImageItem对应的子项             
                                                        new String[] {"ItemImage","ItemText"},     
                                                            
                                                        //ImageItem的XML文件里面的一个ImageView,两个TextView ID     
                                                        new int[] {R.id.ItemImage,R.id.ItemText});    
              //添加并且显示     
              gridview.setAdapter(saImageItems);    
              //添加消息处理     
              gridview.setOnItemClickListener(new ItemClickListener());    
          }    
              
          //当AdapterView被单击(触摸屏或者键盘),则返回的Item单击事件     
          class  ItemClickListener implements OnItemClickListener{    
              public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3){    
                    HashMap<String, Object> item=(HashMap<String, Object>) arg0.getItemAtPosition(arg2);    
                    //显示所选Item的ItemText     
                    setTitle((String)item.get("ItemText"));    
              }             
          }    
      
    }

    三、SlidingDrawer

    SlidingDrawer(滑动式抽屉)隐藏屏外的内容,并允许用户拖拽一个handle以显示隐藏的内容。SlidingDrawer可以在垂直或者水平使用。它由两个子视图组成:一个是用户拖拽的handle(柄),另一个是随着拖动变化的content(内容)。SlidingDrawer应当作为内部布局的覆盖来使用,也就是说SlidingDrawer内部应该使用FrameLayout或RelativeLayout布局。SlidingDrawer的大小决定了其内容显示时所占空间的大小,所以它的尺寸一般定义为match_parent。在XML布局中SlidingDrawer必须指定handle和content的id:

    activity_main.xml”文件

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:orientation="vertical" >  
        <SlidingDrawer   
            android:id="@+id/slidingdraw"  
            android:layout_width="match_parent"  
            android:layout_height="match_parent"  
            android:handle="@+id/handle"  
            android:content="@+id/content"  
            >  
            <ListView   
                android:id="@id/content"  
                android:layout_width="match_parent"  
                android:layout_height="match_parent"  
                />  
                   <ImageView android:id="@id/handle"  
                android:src="@drawable/ic_launcher"  
                android:layout_width="88dip"  
                android:layout_height="44dip"   
                android:contentDescription="TODO"/>  
        </SlidingDrawer>  
      
    </LinearLayout>

    MainActivity.java”文件

    public class MainActivity extends Activity {
        private SlidingDrawer mDrawer;
        private ImageView mImageView;
        private ListView lvNews;
        private String a[] = { "互联网产品中的情感化设计", "有效导向社交产品的商业价值", "移动开发者:得90后者得天下",     
                "用户体验:从App的加载页面说开去", "用扁平化的界面设计吸引用户", "实体与数字世界的交集",     
                "网络社区用户成长的5个思考模式", "十大值得关注的传统企业电商", "2013年十大热点技术发展趋势","了解产品的开发环节:环形设计论",  
                "客户忠诚度的四个层次","在手机背面贴张'纸'就能轻松充电","互联网公司是怎样激发你的消费欲望的","高效工作的信息搜集及管理术" }; 
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mDrawer=(SlidingDrawer)this.findViewById(R.id.slidingDrawer1);
            mImageView=(ImageView)this.findViewById(R.id.handle);
            
            //获取ListView并填充内容
            lvNews=(ListView)findViewById(R.id.content);
            lvNews.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,a));
            
          //监听打开抽屉事件
            mDrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {
                
                @Override
                public void onDrawerOpened() {
                    // TODO Auto-generated method stub
                     mImageView.setImageResource(R.drawable.ic_launcher);  
                }
            });
            mDrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
                
                @Override
                public void onDrawerClosed() {
                    // TODO Auto-generated method stub
                       mImageView.setImageResource(R.drawable.ic_launcher);  
                }
            });
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
    }

    四、标签组件Tabhost

    TabHost的实现有两种方式,第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。

    第二种方式,不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。

    第二种方式:布局文件中定义TabHost

    activity_main.xml”文件

    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
        android:id="@+id/hometabs"  
        android:orientation="vertical"  
        android:layout_width="match_parent"    
        android:layout_height="match_parent">   
        <TabHost android:id="@+id/tabhost"  
             android:layout_width="fill_parent"  
             android:layout_height="wrap_content">  
             <LinearLayout  
                android:orientation="vertical"  
                android:layout_width="match_parent"  
                android:layout_height="match_parent">  
                  
                 <TabWidget android:id="@android:id/tabs"   
                  android:orientation="horizontal"  
                  android:layout_width="match_parent"  
                  android:layout_height="wrap_content">  
                </TabWidget>  
               
                 <FrameLayout android:id="@android:id/tabcontent"  
                      android:layout_width="wrap_content"  
                      android:layout_height="wrap_content">  
                          <TextView android:id="@+id/text"  
                            android:layout_width="match_parent"  
                            android:layout_height="match_parent" 
                            android:text="第一个选项框"/>  
                            <TextView android:id="@+id/photo"  
                            android:layout_width="match_parent"  
                            android:layout_height="match_parent" 
                            android:text="第二个选项框"/>  
                            <TextView android:id="@+id/video"  
                            android:layout_width="match_parent"  
                            android:layout_height="match_parent" 
                            android:text="第三个选项框"/>  
                 </FrameLayout>  
               
             </LinearLayout>  
        </TabHost>  
    </LinearLayout>

    MainActivity.java”文件

    package com.genwoxue.tabhost_b;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.widget.TabHost;
    import android.widget.TabWidget;
    
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            //获取TabHost对象
            TabHost tabHost = (TabHost) findViewById(R.id.tabhost);  
            tabHost.setup();  
            //获取TabWidget对象
            TabWidget tabWidget = tabHost.getTabWidget();
            //添加选项框一
            tabHost.addTab(tabHost  
                    .newTabSpec("tab1")  
                    .setIndicator("文本新闻",getResources().getDrawable(R.drawable.ic_launcher))  
                    .setContent(R.id.text));  
            //添加选项框二
            tabHost.addTab(tabHost  
                    .newTabSpec("tab2")  
                    .setIndicator("图片新闻",getResources().getDrawable(R.drawable.ic_launcher))  
                    .setContent(R.id.photo));  
            //添加选项框三
            tabHost.addTab(tabHost  
                    .newTabSpec("tab3")  
                    .setIndicator("视频新闻",getResources().getDrawable(R.drawable.ic_launcher))  
                    .setContent(R.id.video));  
    
        }
    
    }
  • 相关阅读:
    handler之责任链模式
    简单的PL/SQl链接远程ORACLE数据库方法
    An internal error occurred during: "Add Deployment". Container with path org.eclipse.jdt.launching.
    myeclipse非正常关闭处理办法
    jQuery Plugin Poshy Tip 使用 统一提示信息
    myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题
    CSS实现背景透明,文字不透明,兼容所有浏览器
    @SuppressWarnings注解
    @GeneratorValue与@GenericGenerator注解使用心得
    jap的教程
  • 原文地址:https://www.cnblogs.com/ilooking/p/4264338.html
Copyright © 2011-2022 走看看