Android View之用户界面...

PS:Android的控件真的是很多...现在还在忙到控件...也是神了....

学习内容:

1.Spinner下拉菜单...

2.AutoComplete TextView自动完成文本框...

1.Spinner下拉菜单....

  下拉菜单,这个是非常熟悉的...这个大部分应用基本是有的...比较常用,相对而言,挺简单的,就是有些地方不那么容易理解而已...Spinner这个东西需要使用到适配器...那什么是适配器呢?到底是干什么用的呢?就是将我们保存的数据更好的显示在View上...这就是适配器的基本作用...这样说有可能有点抽象...上个代码....这里我们先在xml文件中定义一个类似于数组的一个东西来保存数据...这里的数据信息就代表下拉菜单将要显示的数据...

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">下拉菜单...</string>
    <string name="action_settings">...</string>
    <string name="color">选择颜色:</string>
    <string-array name="colors">
      <item>red</item>
      <item>blue</item>
      <item>green</item>
      <item>white</item>
    </string-array>
</resources>

布局文件基本没什么东西,直接在布局的文件中加入一个下拉菜单控件就行了...

  <TextView
        android:id="@+id/color"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/color"/>
    <Spinner
        android:id="@+id/spinner"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:prompt="@string/color"/>
<!--prompt表示的是在初始情况下显示的文本...-->

这里最主要的还是java文件...这个java文件给我的感觉才是最坑人的...有一些东西很不容易理解...比如说ArrayAdapter这是个数组适配器,这个数组适配器的目的就是为了保存我们的数据资源..

package com.example.andorid_radio;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
    Spinner sp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sp=(Spinner)findViewById(R.id.spinner);
        //创建一个数组适配器...这个适配器将保存实例的资源信息和id信息...以及列表显示的风格...

        /* public static ArrayAdapter<CharSequence> 字符集合 createFromResource(Context context,
         *  int textArrayResId, int textViewResId) {        传递的是当前这个资源文件的TextView中的id信息并读取资源文件里的数据生成适配器...
         *    CharSequence[] strings = context.getResources().getTextArray(textArrayResId);//获取数据源在数组内的标识符..说白了就是string.xml文件里的数据...
         *    return new ArrayAdapter<CharSequence>(context, textViewResId, strings);//返回一个字符集类型的适配器..textViewResId表示的是布局文件里控件的id信息..
         *    }
         *  上面这个东西是createFromResource的源码..内容很清楚...
         *  下面函数的三个参数this表示当前Activity,R.array.colors表示的是string.xml文件里的string-array...
         *  android.R.id.layout.simple_spinner_item..表示布局文件里的下拉列表...
         * */

        ArrayAdapter adapter=ArrayAdapter.createFromResource(this, R.array.colors, android.R.layout.simple_spinner_item);
        //设置下拉时的效果...这里为系统默认的效果...
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //设置下拉列表选项里的内容信息为数组适配器内的数据信息...
        sp.setAdapter(adapter);
        //定义子元素选择监听器...
        OnItemSelectedListener oisl=new OnItemSelectedListener() {

            @Override
            /*这里解释一下这几个参数的含义...AdapterView<?> arg0这个表示的是下拉列表被选择..View arg1...表示哪个子元素被选择..
             * arg2表示适配器内哪一个view被选择的定位... arg3表示哪一行被选择...
             * arg0.getItemAtPosition(arg2).toString()表示下拉列表内的选项被选择的信息...被转化成字符串的形式显示出来...
             * */
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                //用一个信息提示框来显示触发的信息...
                Toast.makeText(MainActivity.this, arg0.getItemAtPosition(arg2).toString(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
            }
        };
        //
        sp.setOnItemSelectedListener(oisl);
    }

    @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.AutoCompleteTextView自动完成文本框...

  自动完成文本框与适配器捆绑在一起,这个控件的基本作用就是当我们在输入信息的时候,系统会根据适配器里的内容进行自动匹配显示...这个空间也是非常常用的...我们来看看它的作用...

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">下拉菜单...</string>
    <string name="action_settings">...</string>
    <string-array name="province">
        <item>shan dong</item>
        <item>jiang su</item>
        <item>an hui</item>
        <item>zhe jiang</item>
        <item>fu jian</item>
        <item>shang hai</item>
        <item>guang dong</item>
        <item>guang xi</item>
        <item>hai nan</item>
        <item>hu bei</item>
        <item>hu nan</item>
        <item>he nan</item>
        <item>jiang xi</item>
        <item>bei jing</item>
        <item>tian jin</item>
        <item>he bei</item>
        <item>shan xi</item>
        <item>nei meng gu</item>
        <item>ning xia</item>
        <item>xin jiang</item>
        <item>qing hai</item>
        <item>shan xi</item>
        <item>gan su</item>
        <item>si chuan</item>
        <item>yun nan</item>
        <item>gui zhou</item>
        <item>xi zang</item>
        <item>chong qing</item>
        <item>liao ning</item>
        <item>ji lin</item>
        <item>hei long jiang</item>
        <item>tai wan</item>
        <item>xiang guang</item>
        <item>ao men </item>
        <item>山东</item>
        <item>江苏</item>
        <item>安徽</item>
        <item>浙江</item>
        <item>福建</item>
        <item>上海</item>
        <item>广东</item>
        <item>广西</item>
        <item>海南</item>
        <item>湖北</item>
        <item>湖南</item>
        <item>河南</item>
        <item>江西</item>
        <item>北京</item>
        <item>天津</item>
        <item>河北</item>
        <item>山西</item>
        <item>内蒙古</item>
        <item>宁夏</item>
        <item>新疆</item>
        <item>青海</item>
        <item>陕西</item>
        <item>甘肃</item>
        <item>四川</item>
        <item>云南</item>
        <item>贵州</item>
        <item>西藏</item>
        <item>重庆</item>
        <item>辽宁</item>
        <item>吉林</item>
        <item>黑龙江</item>
        <item>台湾</item>
        <item>香港</item>
        <item>澳门</item>
    </string-array>
</resources>

这个xml文件大家一看就懂,就是弄了一个string数组,里面来保存我们的数据信息...然后就是布局文件...

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="省份"/>
    <!--这里completionThreshold="1"这句话表示的是我们输入几个字符时才给出提示,我这个就是输入一个字符就会给出提示...-->
    <AutoCompleteTextView
        android:id="@+id/AutoCompleteTextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="请输入省份..."
        android:completionThreshold="1">
    </AutoCompleteTextView>
</RelativeLayout>

  很简单的布局文件...因为不是什么成品的东西,所以涉及的东西就很少...前面已经说过AutoCompleteTextView是与适配器进行绑定的一个控件...因此必然少不了适配器的存在..接着我们看看java文件...

package com.example.andorid_radio;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String [] province=getResources().getStringArray(R.array.province);//目的是获取string.xml文件里的数据信息...

        //然后将我们获取的数据信息放入到新建的数组适配器当中...
        ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,province);

        AutoCompleteTextView acv=(AutoCompleteTextView)findViewById(R.id.AutoCompleteTextView01);

        //将acv与适配器进行绑定...
        acv.setAdapter(adapter);
    }

    @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.DatePicker控件...

  日期选择控件,其实就是一个修改日期时间的一个控件...这里放入一个文本显示控件用来显示信息,另一个按钮用来进行触发,当按钮被触发的时候会显示一个新的窗口来修改日期时间信息...

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <TextView
        android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="请设置日期"/>
    <Button
        android:id="@+id/Button01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="设置日期和时间"/>
</RelativeLayout>

然后就是java文件...

package com.example.andorid_radio;

import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.DatePicker;
import android.widget.Button;
import android.widget.TextView;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.view.View.OnClickListener;
import android.app.Dialog;
public class MainActivity extends Activity {
    private int myear,mmonth,mday;
    Button btn_1;
    TextView dateDisplay;
    static final int Date_Dialog_Id=0;
    //当日期被设置的时候触发监听器...
    private OnDateSetListener osl=new DatePickerDialog.OnDateSetListener(){

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // TODO Auto-generated method stub
            myear=year;
            mmonth=monthOfYear;
            mday=dayOfMonth;
            dateDisplay.setText(myear+"-"+mmonth+"-"+mday);
        }

    };
    //重写方法...创建一个新的窗口然后返回...
    @Override
    protected Dialog onCreateDialog(int id){
        switch(id){
        case Date_Dialog_Id:{
            //这里必须要传递这五个参数...
            return new DatePickerDialog(this,osl,myear,mmonth,mday);
            }
        }
        return null;

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Calendar c=Calendar.getInstance();
        myear=c.get(Calendar.YEAR);
        mmonth=c.get(Calendar.MONTH);
        mday=c.get(Calendar.DAY_OF_MONTH);
        //按钮点击时被触发...
        OnClickListener osl=new Button.OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //重写其内部的方法来显示窗口...
                showDialog(Date_Dialog_Id);
            }

        };

        dateDisplay=(TextView)findViewById(R.id.TextView01);
        btn_1=(Button)findViewById(R.id.Button01);
        btn_1.setOnClickListener(osl);

    }

    @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;
    }

}

PS:在日出之前奔跑,在夕阳之下辉煌...

时间: 2024-08-26 09:10:54

Android View之用户界面...的相关文章

Android View和ViewGroup

View和ViewGroup Android的UI界面都是由View和ViewGroup及其派生类组合而成的. 其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的. View对象是Android平台中用户界面体现的基础单位. View类是它称为“widgets(工具)”的子类的基础,它们提供了诸如文本输入框和按钮之类的UI对象的完整实现. ViewGroup类同样为其被称为“Layouts(布局)”的子类奠定了基础,它们提供了象流式布局

android View 详解

android.View.View(即View)类是以矩形的方式显示在屏幕上,View是用户界面控件的基础.View的继承层次关系如下图: 可以看到所有的界面控件都是View的子类.简单证实一下,每当你用findViewByIds(R.id.xx)时总要将其强转,因为该方法返回的是一个View实例,有木有!!!其中不得不提View的subClass ViewGroup.Android系统中的所有UI类都是建立在View和ViewGroup这两个类的基础上的.所有View的子类成为"Widget&

android.view.inputmethod

接口 InputConnection InputMethod InputMethod.SessionCallback InputMethodSession InputMethodSession.EventCallback 类 BaseInputConnection CompletionInfo EditorInfo ExtractedText ExtractedTextRequest InputBinding InputConnectionWrapper InputMethodInfo Inpu

android.view.View

* This class represents the basic building block for user interface components. A View * occupies a rectangular area on the screen and is responsible for drawing and * event handling. View is the base class for <em>widgets</em>, which are * us

Android View体系(二)实现View滑动的六种方法

相关文章: Android View体系(一)视图坐标系 1.View的滑动简介 View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到View的滑动的处理.其实不管是那种滑动的方式基本思想都是类似的:当触摸事件传到View时,系统记下触摸点的坐标,手指移动时系统记下移动后的触摸的坐标并算出偏移量,并通过偏移量来修改View的坐标. 实现View滑动有很多种方法,这篇文章主要讲解六种滑动的方法,分别是:layout().offsetLeftAndRight()与offs

Android View 事件分发机制 源码解析 (上)

一直想写事件分发机制的文章,不管咋样,也得自己研究下事件分发的源码,写出心得~ 首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志~ MyButton [java] view plain copy package com.example.zhy_event03; import android.content.Context; import andr

Android View 触摸事件传递机制

PS:以现在的眼光看以前写的博客感觉写的很烂,或许或一段时间再看现在的博客会有同样的感觉.所以每时每刻都去学习,去发现和理解新的东西. 引言 由于之前写的一篇关于Android事件传递顺序的博客质量太差,可能是理解不到位的原因,故最近又花了许多时间再次去看Android源码,看完之后有了新的理解,所以打算重新整理这篇博客.理解Android触摸事件传递机制有助于日后的开发以及自定义一些手势效果等.注意:这篇博客是基于Android2.0源码来分析的,不管老版本还是新版本的Android,其内部触

java.lang.NoSuchMethodException: [class android.view.View]

05-24 11:38:35.884: E/AndroidRuntime(1819): FATAL EXCEPTION: main05-24 11:38:35.884: E/AndroidRuntime(1819): Process: com.example.activitytest, PID: 181905-24 11:38:35.884: E/AndroidRuntime(1819): java.lang.IllegalStateException: Could not find a met

Android View measure (三) 常用方法

ViewGroup.measureChildren() ViewGroup.measureChild() ViewGroup.measureChildWithMargins() /** * Ask one of the children of this view to measure itself, taking into * account both the MeasureSpec requirements for this view and its padding * and margins