Android开发04—Android常用高级控件(下)

Android开发04—Android常用高级控件(上)Android开发04—Android常用高级控件(上)1.自动完成文本框AutoCompl

Android开发04—Android常用高级控件(上)
Android开发04—Android常用高级控件(上)

1.自动完成文本框
AutoCompleteTextView类继承自EditText类。自动完成文本框的外观与文本框没什么区别,只是当用户输入某些文字时,会自动出现下拉菜单显示与输入文字相关的信息。
自动完成文本框可以在XML文件中使用属性进行设置,也可以在Java代码中通过方法进行设置。

实例:
main.xml:

<?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/linearLayout1">        <AutoCompleteTextView android:text="AutoCompleteTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/autoCompleteTextView1"></AutoCompleteTextView>    </LinearLayout>

Activity:
package qijia.si;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;import android.widget.Button;import android.widget.ImageView;public class MyAndroidProject extends Activity {private static final String[] myStr = new String[]{"aaa","bbb","ccc","aab","aac","aad"};//常量数组用于提示/** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);           setContentView(R.layout.main);        ArrayAdapter<String> aa = new ArrayAdapter<String>(        this,        android.R.layout.simple_dropdown_item_1line,        myStr        );//使用适配器    AutoCompleteTextView myAuto = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);    myAuto.setAdapter(aa);    myAuto.setThreshold(1);    }}

2.滚动视图
ScrollView类继承自FrameLayout类。ScrollView其实是一个帧布局,一般情况下,其中的控件是按照线性进行布局的,用户可以对其进行滚动。
ScrollView既可以在XML中配置也可在Java代码中进行配置。
ScrollView的使用方法比较简单,只需要将需要滚动的控件添加到ScrollView中即可。ScrollView同一时刻只能包含一个View。

具体方法:
package qijia.si;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;import android.widget.Button;import android.widget.ImageView;import android.widget.ScrollView;import android.widget.TextView;public class MyAndroidProject extends Activity {ScrollView scrollView;String msg = "我是字符串,我很长很长!我是字符串,我很长很长!";String str = "";/** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);           setContentView(R.layout.main);        scrollView = new ScrollView(this);        TextView tv = new TextView(this);        tv.setTextSize(23);        for(int i = 0;i<10;i++){        str = str + msg;        }        tv.setText(str);        scrollView.addView(tv);        setContentView(scrollView);            }  }


3.列表视图
ListView类是一种列表视图,将ListAdapter所提供的各个控件显示在一个垂直且可以滚动的列表中。
该类使用方法简单,只需要先初始化所需要得数据,然后创建适配器并将其设置给ListView,ListView便将信息以列表的形式显示到页面中。

使用案例:

string.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">AbsoluteExample</string>    <string name="hello">您选择了</string>    <string name="andy">Andy Rubin \nAndroid的创造者之一</string>    <string name="Bill">Bill Joy \nJava创造者之一</string>    <string name="edgar">Edgar F. Codd \n关系数据库之父</string>    <string name="torvalds">Linus Torvalds \nLinux之父</string>    <string name="turing">Turing Alan \nIT的祖师爷</string>    <string name="ys">您选择了</string></resources>

colors.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <color name="white">#ffffff</color>    <color name="red">#ff0000</color>    <color name="black">#000000</color>    <color name="green">#00ff00</color>    <color name="gray">#050505</color>    <color name="blue">#0000ff</color></resources>
main.xml
<?xml version="1.0" encoding="utf-8"?>    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent">        <TextView android:layout_height="wrap_content" android:id="@+id/textView1" android:layout_width="fill_parent" android:textSize="24dip" android:textColor="@color/white" android:text="@string/hello"></TextView>        <ListView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/listView1" android:choiceMode="singleChoice"></ListView>    </LinearLayout>
  
  
   
   

Activity:
package qijia.si;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.Gallery;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.ScrollView;import android.widget.TextView;public class MyAndroidProject extends Activity {int[] drawableIds = {R.drawable.andy,R.drawable.bill,R.drawable.edgar,R.drawable.torvalds,R.drawable.turing};int[] msgIds = {R.string.andy,R.string.Bill,R.string.edgar,R.string.torvalds,R.string.turing};/** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);           setContentView(R.layout.main);        ListView lv = (ListView) findViewById(R.id.listView1);                BaseAdapter ba = new BaseAdapter(){        public int  getCount() {return 5;}        public Object getItem(int arg0){return null;}        public long getItemId(int arg0){return 0;}        public View getView(int arg0,View arg1, ViewGroup arg2){        //动态生成每一个下拉项对应的View,每个下拉项View由LinearLayout        //中包含一个ImageView及一个TextView,由代码动态生成        LinearLayout ll = new LinearLayout(MyAndroidProject.this);                ll.setOrientation(LinearLayout.HORIZONTAL);        ll.setPadding(5, 5, 5, 5);        ImageView ii = new ImageView(MyAndroidProject.this);        ii.setImageDrawable(getResources().getDrawable(drawableIds[arg0]));        ii.setScaleType(ImageView.ScaleType.FIT_XY);        ii.setLayoutParams(new Gallery.LayoutParams(100,98));        ll.addView(ii);        TextView tv = new TextView(MyAndroidProject.this);        tv.setText(getResources().getText(msgIds[arg0]));        tv.setTextSize(24);        tv.setTextColor(MyAndroidProject.this.getResources().getColor(R.color.white));        tv.setPadding(5, 5, 5, 5);        ll.addView(tv);        return ll;                }                };        lv.setAdapter(ba);        lv.setOnItemSelectedListener(new OnItemSelectedListener(){        public void onItemSelected(AdapterView<?> arg0,View arg1, int arg2,long arg3){        TextView tv = (TextView) findViewById(R.id.textView1);                LinearLayout ll = (LinearLayout)arg1;                TextView tvn = (TextView)ll.getChildAt(1);        StringBuilder sb = new StringBuilder();                sb.append(getResources().getText(R.string.ys));        sb.append(":");        sb.append(tvn.getText());        String stemp = sb.toString();        tv.setText(stemp.split("\\n")[0]);        }        public void onNothingSelected(AdapterView<?> arg0){}        });        lv.setOnItemClickListener(new OnItemClickListener(){        public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3){        TextView tv = (TextView) findViewById(R.id.textView1);        LinearLayout ll =(LinearLayout) arg1;                TextView tvn = (TextView)ll.getChildAt(1);        StringBuilder sb = new StringBuilder();                sb.append(getResources().getText(R.string.ys));        sb.append(":");        sb.append(tvn.getText());        String stemp  = sb.toString();        tv.setText(stemp.split("\\n")[0]);        }        });    }  }
4.网络视图
GridView类同样位于android.widget包下。该视图将其空间以二维格式显示到表格中,而这些控件全部来自于ListAdapter适配器。
strings.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">当前无选中选项</string>    <string name="app_name">Sample_5_3</string>    <string name="andy">Andy Rubin</string>    <string name="bill">Bill Joy</string>    <string name="edgar">Edgar F. Codd</string>    <string name="torvalds">Linus Torvalds</string>    <string name="turing">Turing Alan</string>    <string name="andydis">Android的创造者</string>    <string name="billdis">Java创造者之一</string>    <string name="edgardis">关系数据库之父</string>    <string name="torvaldsdis">Linux之父</string>    <string name="turingdis">IT的祖师爷</string>         </resources>

colors.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <color name="red">#fd8d8d</color><color name="green">#9cfda3</color><color name="blue">#8d9dfd</color><color name="white">#FFFFFF</color><color name="black">#000000</color><color name="gray">#050505</color></resources>
main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent">    <TextView      android:id="@+id/TextView01"    android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/hello"    android:textColor="@color/white"    android:textSize="24dip"/>    <GridView     android:id="@+id/GridView01"     android:layout_width="fill_parent"     android:layout_height="fill_parent"    android:verticalSpacing="5dip"    android:horizontalSpacing="5dip"    android:stretchMode="columnWidth"/></LinearLayout>
grid_row.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout   android:id="@+id/LinearLayout01"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:orientation="horizontal"  xmlns:android="http://schemas.android.com/apk/res/android">  <ImageView    android:id="@+id/ImageView01"    android:scaleType="fitXY"   android:layout_width="100dip"   android:layout_height="98dip"/><TextView     android:id="@+id/TextView02"     android:layout_width="100dip"     android:layout_height="wrap_content"    android:textColor="@color/white"        android:textSize="24dip"        android:paddingLeft="5dip"/><TextView     android:id="@+id/TextView03"     android:layout_width="wrap_content"     android:layout_height="wrap_content"    android:textColor="@color/white"        android:textSize="24dip"        android:paddingLeft="5dip"/></LinearLayout>
Activity:

package qijia.si;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.LinearLayout;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;public class GridDemo extends Activity {//所有资源图片(andy、bill、edgar、torvalds、turing)id的数组int[] drawableIds={R.drawable.andy,R.drawable.bill,R.drawable.edgar,R.drawable.torvalds,R.drawable.turing};//所有资源字符串(andy、bill、edgar、torvalds、turing)id的数组int[] nameIds={R.string.andy,R.string.bill,R.string.edgar,R.string.torvalds,R.string.turing};int[] msgIds={R.string.andydis,R.string.billdis,R.string.edgardis,R.string.torvaldsdis,R.string.turingdis};    public List<? extends Map<String, ?>> generateDataList(){    ArrayList<Map<String,Object>> list=new ArrayList<Map<String,Object>>();;    int rowCounter=drawableIds.length;//得到表格的行数    for(int i=0;i<rowCounter;i++){//循环生成每行的包含对应各个列数据的Map;col1、col2、col3为列名    HashMap<String,Object> hmap=new HashMap<String,Object>();    hmap.put("col1", drawableIds[i]);   //第一列为图片     hmap.put("col2", this.getResources().getString(nameIds[i]));//第二例为姓名    hmap.put("col3", this.getResources().getString(msgIds[i]));//第三列为描述    list.add(hmap);    }        return list;}    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        GridView gv=(GridView)this.findViewById(R.id.GridView01);                SimpleAdapter sca=new SimpleAdapter(        this,        generateDataList(), //数据List        R.layout.grid_row, //行对应layout id        new String[]{"col1","col2","col3"}, //列名列表        new int[]{R.id.ImageView01,R.id.TextView02,R.id.TextView03}//列对应控件id列表        );        gv.setAdapter(sca);//为GridView设置数据适配器        gv.setOnItemSelectedListener(//设置选项选中的监听器           new OnItemSelectedListener(){           public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {//重写选项被选中事件的处理方法           TextView tv=(TextView)findViewById(R.id.TextView01);//获取主界面TextView           LinearLayout ll=(LinearLayout)arg1;//获取当前选中选项对应的LinearLayout           TextView tvn=(TextView)ll.getChildAt(1);//获取其中的TextView            TextView tvnL=(TextView)ll.getChildAt(2);//获取其中的TextView            StringBuilder sb=new StringBuilder();           sb.append(tvn.getText());//获取姓名信息           sb.append(" ");           sb.append(tvnL.getText());//获取描述信息           tv.setText(sb.toString());//信息设置进主界面TextView           }           public void onNothingSelected(AdapterView<?> arg0){}           }        );          gv.setOnItemClickListener( //设置选项被单击的监听器        new OnItemClickListener(){           public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {//重写选项被单击事件的处理方法           TextView tv=(TextView)findViewById(R.id.TextView01);//获取主界面TextView           LinearLayout ll=(LinearLayout)arg1;//获取当前选中选项对应的LinearLayout           TextView tvn=(TextView)ll.getChildAt(1);//获取其中的TextView            TextView tvnL=(TextView)ll.getChildAt(2);//获取其中的TextView            StringBuilder sb=new StringBuilder();           sb.append(tvn.getText());//获取姓名信息           sb.append(" ");           sb.append(tvnL.getText());//获取描述信息           tv.setText(sb.toString());//信息设置进主界面TextView           }                      }        );            }}