zoukankan      html  css  js  c++  java
  • 安卓开发3-自定义安卓组件titlebar

    1,titlebar

        button  + textview实现

        在layout文件夹内创建titlebar.xml文件

               创建一个水平linearlayout  ,将button与text放进去,根绝上一节的 自适应特性 设置 layout-width 与layout-height  值 例如 @dimner/x333

    2,放入主布局中

        在朱布局代码中加入<include layout="@文件夹名/xml文件名">在其中也可以加入id之类的属性

        本文中为<include layout="@layout/titlebar"/>  

    3,数据绑定

        就是把xml布局中的组件找出来,用java代码给其赋值并显示。就是jQuery的docment.getIDby("xxx").value之类的意思

      下面是设计

        第一个就是button onclick事件的设计

            自然而然,点击了这个按钮就是用户看到了页面回去了(返回按钮),页面怎么回去先不管,activity或者fragment,这个另说

        第二个就是 textview里内容的设置,转到不同的页面,页面抬头自然不一样。

      所以就是以上两点(初步设想,方案会有后续改动)

    ··    (1)看你绑定的数据是啥,简单的arrayadapter,simpleadapter就行

          复杂的就extends baseAdapter

          我的理解是,首先确定数据源,要绑定组件对象,看用哪种adapter

    或者是 放进去 绑定对象 的 是一个自定义的组件 ,除了要 显示这个自定义的组件 外 ,还要把数据绑到 这个自定义的组件 里

     

          点击后的代码再议吧,这边我倒觉得这倒是没什么绑定,新手还请大家指点,九宫格那个才是,见后面代码

      Button button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
    
                }
            });
    

      

     下面就是这个九宫格的了,适配器代码和后面使用代码

         (2)public class NineSquareAdaper extends BaseAdapter

    package com.example.administrator.oop;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    /**
     * Created by Administrator on 2015/6/25.
     */
    public class NineSquareAdaper extends BaseAdapter {
        private Context context;
    
        public NineSquareAdaper(Context context) {
            this.context=context;
        }
    
        private Integer[] images = {
                //九宫格图片的设置
                R.drawable.icon01,
                R.drawable.icon02,
                R.drawable.icon03,
                R.drawable.icon04,
                R.drawable.icon05,
                R.drawable.icon06,
                R.drawable.icon07,
                R.drawable.icon08,
                R.drawable.icon09,
        };
        private String[] texts = {
                //九宫格图片下方文字的设置
                "记录支出",
                "记录收入",
                "账本管理",
                "类别管理",
                "查看图表",
                "收支对照",
                "记录心得",
                "新闻公告",
                "系统设置",
        };
        @Override
        // 1  当系统开始绘制ListView的时候,首先调用getCount()方法。得到它的返回值,即ListView的长度
        public int getCount() {
            return images.length;
        }
    //getItem()和getItemId()则在需要处理和取得Adapter中的数据时调用。
        @Override
        public Object getItem(int position) {
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        // 2 根据getCount()返回长度逐一绘制ListView的每一行
        public View getView(int position, View convertView, ViewGroup parent) {
            ImgTextWrapper wrapper;
            if(convertView==null) {
                wrapper = new ImgTextWrapper();
    //            在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
    //            具体作用:
    //            1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
    //            2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素
                //http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html
                LayoutInflater inflater = LayoutInflater.from(context);
                convertView = inflater.inflate(R.layout.squares, null);
                convertView.setTag(wrapper);
                convertView.setPadding(15, 15, 15, 15);  //每格的间距
            } else {
                wrapper = (ImgTextWrapper)convertView.getTag();
            }
    
            wrapper.imageView = (ImageView)convertView.findViewById(R.id.ItemImage);
            wrapper.imageView.setBackgroundResource(images[position]);
            wrapper.textView = (TextView)convertView.findViewById(R.id.ItemText);
            wrapper.textView.setText(texts[position]);
    
            return convertView;
        }
    }
    
    class ImgTextWrapper {
        ImageView imageView;
        TextView textView;
    
    }
    

      使用的时候代码

    package com.example.administrator.oop;
    
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.GridView;
    import android.widget.Toast;
    
    
    public class MainActivity extends ActionBarActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.nine_squares);
            GridView gridview = (GridView) findViewById(R.id.gridView1);
            Button button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
    
    
                }
            });
    
            gridview.setAdapter(new NineSquareAdaper(this));//绑定适配器
            gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {//重写选项被单击事件的处理方法
    
                    // arg1是被点击的view,arg2是被点击view在gridview中的索引
                }
            });
    
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }
    

      

         本段代码尚未测试,谨保证语法正确   

  • 相关阅读:
    asp.net 下载EXCEL文件
    C# 泛型实现Table与实体的相互转换
    SQL处理数据并发,解决ID自增
    html Canvas 画图 能够选择并能移动
    AJAX get/post;
    (转) C# Async与Await的使用
    FormattableString 取代特定区域字符串
    少用 string.Format
    少用 string.Format
    如何重写object虚方法
  • 原文地址:https://www.cnblogs.com/puck/p/4600158.html
Copyright © 2011-2022 走看看