关于Android界面组件的基本用法

1.文本框(TextView)和编辑框(EditText)
文本框(TextView)不允许用户编辑文本内容,而编辑框(EditText)允许用户编辑文本内容

2.按钮(Button)和图片按钮(ImageButton)
Button显示文字,ImageButton显示图片。
为ImageButton指定android:text属性没用,不会显示文字
可以指定android:background为按钮增加背景图片,但这图片是固定的
可以指定android:src为图片按钮增加图片属性
其实,src才是设置图标,而background只是设置背景。
如果控件的大小是100100 图片资源是8080的话,那么用src,图片就会居中显示,如果使用background那么图片就会被拉伸充满控件。
重要的是,background是底层的图片资源,src是覆盖在background上面的资源,他们可以叠加使用,实现选中的效果。

3.单选按钮(RadioButton)和复选框(CheckBox)
多了一个android:checked属性,用于指定初始时是否被选中

checkBox.setOnCheckedChangeListener( new OnCheckedChangeListener(){
    public void onCheckedChanged( CompoundButton buttonView, Boolean isChecked ){
        if( checkbox.isChecked() ){
            checkbox.getText();
}
}
} )

4.计时器组件Chronometer用法
红色字体表示常用的方法

final Chronometer ch = (Chronometer)findViewById(R.id.test); //获取计时器组件
Button start = (Button)findViewById(R.id.start); //获取“开始”按钮
start.setOnClickListener(new OnClickListener(){
            public void onClick(View source)
            {
                //设置开始计时时间
                ch.setBase(SystemClock.elapsedRealtime());
                //启动计时器
                ch.start();             
            }
}); 
ch.setOnChronometerTickListener(new OnChronometerTickListener(){
            public void onChronometerTick(Chronometer ch)
            {
                //如果从开始计时到现在超过了20s。
                if(SystemClock.elapsedRealtime() - ch.getBase() > 20 * 1000)
                        ch.stop();
            }
});

5.图像视图(ImageView)
它支持属性android:scaleType setScaleType(ImageView.ScaleType)

matrix(ImageView.ScaleType.MATRIX):使用matrix方式进行
fixXY(ImageView.ScaleType.FIX_XY):对图片横向纵向独立缩放,会改变纵横比
fitStart(ImageView.ScaleType.FIT_START):保持纵横比,图片较长的边长与ImageView相应的边长相等,缩放后放在左上角
fitCenter(ImageView.ScaleType.FIT_CENTER):保持纵横比,图片较长的边长与ImageView相应的边长相等,缩放后放在中央
fitEnd(ImageView.ScaleType.FIT_END):保持纵横比,图片较长的边长与ImageView相应的边长相等,缩放后放在右下角
center(ImageView.ScaleType.CENTER):放中间,不缩放
centerCrop(ImageView.ScaleType.CENTER_CROP):保持纵横比,使图片能完全覆盖ImageView
centerInside(ImageView.ScaleType.CENTER_INSIDE):保持纵横比,使ImageView能完全显示图片
6.spinner的功能和用法
如果可以确定spinner里面的列表项,那么直接在/res/layout/main.xml里面指定

<Spinner
    ……
    android:entries=”@string/books”
/>

然后在/res/value/string.xml里面指定

<resources>
    <string name="books">
        <item>疯狂Java讲义</item>
        <item>疯狂Ajax讲义</item>
        <item>疯狂XML讲义</item>
    </string-array>
 </resources>

如果不确定里面的列表项,那么必须要提供一个Adapter,这个Adapter负责决定Spinner列表每项的内容

    BaseAdapter ba = new BaseAdapter()
        {
            public int getCount(){  return 10;  }
            public Object getItem(int position){    return null;    }
            public long getItemId(int position){    return 0;       }
            //上面三个函数都是继承的虚函数
            //重写该方法,该方法返回的View将作为列表框的每项
            public View getView(int position, View convertView, ViewGroup parent) 
            {
                //创建一个LinearLayout,并向其中添加组件
                LinearLayout line = new LinearLayout(SpinnerTest2.this);
                TextView text = new TextView(SpinnerTest2.this);
                line.addView(text);
                //返回LinearLayout实例
                return line;
            }       
        };
        Spinner spinner = (Spinner)findViewById(R.id.test);
        spinner.setAdapter(ba);

7.日期、时间选择器(DatePicker和TimePicker)

    //获取当前的年、月、日、小时、分钟
        Calendar c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);
        hour = c.get(Calendar.HOUR);
        minute = c.get(Calendar.MINUTE);
        //初始化DatePicker组件,初始化时指定监听器
        datePicker.init(year , month ,day , new OnDateChangedListener()
        {
            @Override
            public void onDateChanged(DatePicker arg0, int year, int month, int day)
            {
                ChooseDate.this.year = year;
                ChooseDate.this.month = month;
                ChooseDate.this.day = day;
                //显示当前日期、时间
                showDate(year, month , day , hour, minute);
            }
        });
        //为TimePicker指定监听器
        timePicker.setOnTimeChangedListener(new OnTimeChangedListener()
        {
            @Override
            public void onTimeChanged(TimePicker arg0, int hour, int minute)
            {
                ChooseDate.this.hour = hour;
                ChooseDate.this.minute = minute;
                //显示当前日期、时间
                showDate(year, month , day , hour, minute);
            }
        });

8.自动完成文本框(AutoCompleteTextView)
比普通文本框多了一个功能:当用户输入一定字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单后,组件会按用户选择自动填写该文本框
使用该组件很简单,只要为它设置一个Adapter,该Adapter封装了AutoCompleteTextView预设的提示文本

//创建一个ArrayAdapter,封装数组
ArrayAdapter<String> aa = new ArrayAdapter<String>(
            this,
            android.R.layout.simple_dropdown_item_1line,
            books);             // books是String数组
AutoCompleteTextView actv = (AutoCompleteTextView)findViewById(R.id.auto);
        //设置Adapter
actv.setAdapter(aa);

9.进度条(ProgressBar)
通过style属性可以为ProgressBar指定风格。该属性可以有如下的属性值:

1.@android:style/Widget.ProgressBar.Horizontal 水平进度条
2.@android:style/Widget.ProgressBar.Inverse 不断跳跃、旋转画面的进度条
3.@android:style/Widget.ProgressBar.Large 大进度条
4.@android:style/Widget.ProgressBar.Large.Inverse不断跳跃、旋转画面的大进度条
5.@android:style/Widget.ProgressBar.Small 小进度条
6.@android:style/Widget.ProgressBar.Small.Inverse不断跳跃、旋转画面的小进度条
ProgressBar提供如下方法来操作进度

1.setProgress(int) 设置进度的完成百分比
2.incrementProgressBy(int) 设置进度条的增加或减少。参数为正增加,参数为负减少

实例:
    public void onCreate(Bundle savedInstanceState)
    {
        final ProgressBar bar = (ProgressBar) findViewById(R.id.bar);
        //创建一个负责更新的进度的Handler
        final Handler mHandler = new Handler()
        {
            public void handleMessage(Message msg)
            {
                if (msg.what == 0x111)
                    bar.setProgress(status);
            }
        };
        //启动线程来执行任务
        new Thread()
        {
            public void run()
            {
                while (status < 100)
                {
                    // 获取耗时操作的完成百分比
                    status = doWork();
                    // 发送消息到Handler
                    Message m = new Message();
                    m.what = 0x111;
                    // 发送消息
                    mHandler.sendMessage(m);
                }
            }
        }.start();
    }
    //模拟一个耗时的操作。
    public int doWork()
    {
        //为数组元素赋值
        data[hasData++] = (int)(Math.random() * 100);
        try
        {
            Thread.sleep(100);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        return hasData;
    }

10.选项卡(TabHost)
TabHost仅仅只是一个简单的容器,它提供如下方法

1.newTabSpec(String tag) 创建选项卡
2.addTab(TabHost.TabSpec tabSpec) 添加选项卡
使用TabHost的一般步骤为:

• A. 在界面中定义TabHost组件,并为该组件定义该选项卡的内容
• B. Activity应该继承TabActivity
• C. 调用TabActivity的getTabHost()来获取TabHost对象
• D. 通过TabHost对象的方法来创建选项卡、添加选项卡
选项卡主要由TabHost、TabWidget、FrameLayout3个组件组成,三者缺一不可,想象一下选项卡的特点,多个卡重叠在一起,所以用FrameLayout即帧布局是必要的。另外需要注意的是TabHost、TabWidget、FrameLayout三个组件的android:id必须使用系统默认的名称,而不能自己随意定义,否则会出错。

实例:
TabHost tabHost = getTabHost();或者findViewById也行,不过后面要有tabHost.setup();
        //设置使用TabHost布局
LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true);
        //添加第一个标签页
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("已接电话").setContent(R.id.tab01)); 
        //添加第二个标签页,在标签标题上放置图标
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("呼出电话" , 
        getResources().getDrawable(R.drawable.icon)).setContent(R.id.tab02)); 
        //添加第三个标签页
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("未接电话").setContent(R.id.tab03)); 

11.图像切换器(ImageSwitcher)

    is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
        is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
        is.setFactory(new ViewFactory(){
            @Override
            public View makeView() {
                // TODO Auto-generated method stub
                return iv;
            }
        });

12.网格视图(GridView)
使用GridView一般指定numColumn大于1,否则取默认值为1.那么GridView就变成了ListView
属性android:stretchMode支持如下属性

1.none 不拉伸
2.spacingWidth 仅拉伸元素之间的间距
3.spacingWidthUniform 表格、元素之间的间距一起拉伸
4.columnWidth 仅拉伸表格
13.画廊视图(Gallery)(现在已经被弃用了,不过还是列出来吧)
Gallery用法很简单——为它提供一个内容Adapter,该Adapter的getView方法所返回的View可作为Gallery的列表项。可以通过OnItemSelectedListener监听选择项的改变

14.列表试图(ListView和ListActivity)
1.创建ListView由两种方式:

2.直接使用ListView进行创建
让Activity继承ListActivity(继承了ListActivity的类无需调用setContentView()来显示页面,可以直接设置适配器)
一旦获得ListView后,就要创建显示的列表项了。需要借助内容Adapter,内容Adapter负责提供需要显示的列表项

ListView list2 = (ListView)findViewById(R.id.list2);
        //定义一个数组
        String[] arr ={"孙悟空" , "猪八戒" , "牛魔王"};
        //将数组包装ArrayAdapter
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
            this , android.R.layout.simple_list_item_1 , arr);
        //为ListView设置Adapter
        list2.setAdapter(arrayAdapter); 

创建ArrayAdapter时必须指定一个textViewResourceId,该参数决定每个列表项的外观

1.simple_list_item_1 每个列表项是普通的TextView
2.simple_list_item_2 每个列表项是普通的TextView(字体略大)
3.simple_list_item_checked 每个列表项是已勾选的列表项
4.simple_list_item_multiple_choice 每个列表项是带多选框的文本
5.simple_list_item_single_choice 每个列表项是带多单选按钮的文本
15.使用AlertDialog
1.创建AlertDialog.Builder对象,该对象是AlertDialog的创建器
2.调用AlertDialog.Builder方法为对话框设置图标、标题等
3.调用AlertDialog.Builder的create()方法创建AlertDialog对话框
4.调用AlertDialog的show()方法显示对话框

AlertDialog ad = new AlertDialog.Builder(MainActivity.this).create();
ad.setIcon(R.drawable.a);
ad.setTitle("系统提示: ");
ad.setMessage("带取消、中立和确定按钮的对话框!");
ad.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, "。。。", Toast.LENGTH_SHORT).show();
            }
        });
});
ad.show();

16.使用Toast显示提示框
步骤如下:

• 调用Toast构造器或makeText方法创建Toast对象
• 调用Toast方法来设置该消息的对齐方式等
• 调用Toast的show()方法显示出来
• Toast toast = Toast.makeText(ToastTest.this, "信息", Toast.LENGTH_LONG).show();

17.Notification(一般显示网络状态、电池状态、时间等)
使用Notification发送Notification步骤:

• 调用getSystemService(NOTIFICATION_SERVICE)方法获取系统的Notification Manager服务
• 通过构造器创建一个Notification对象
• 为Notification设置属性
• 通过Notification Manager发送Notification

final NotificationManager nM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notify = new Notification(R.drawable.<id>, “显示通知”, System.currentTimeMillis());
nM.notify(NOTIFY,notify);               //NOTIFY是一个自己定义的ID
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容