Android基本控件使用

来源:互联网 发布:excel2010数据分析工具 编辑:程序博客网 时间:2024/05/16 07:39

1.TextView配置

  <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:gravity="center"

        android:layout_weight="1"

        android:textSize="24sp"
        android:textColor="#00ff00"
        android:text="This is TextView" />

 layout_width和layout_height属性可选值有:match_parent(当前控件的大小和父布局的大小一样)

                                                                                rap_content(让当前控件的大小能够刚好包含住里面的内容)

gravity属性选择center表示文字在垂直和水平方向都居中对齐

textSize属性指定文字的大小

textColor属性指定文字的颜色

2.Button

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"                                   //相对于布局,居中
        android:layout_margin="5dip"                                     //指定控件在上下左右方向上偏移的距离
        android:background="@drawable/back_bg"            //用于为布局或控件指定一个背景
        android:text="Back"
        android:textColor="#fff"
        />

     实现对按钮点击事件的监听方法有两种:

    (1)使用匿名类,在onCreate中实现:

public class MainActivity extends Activity
{
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                
            }
        });

    }

}

    (2)实现接口

public class MainActivity extends Activity implements View.OnClickListener
{
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(this);

    }

    @Override
    public void onClick(View v)
    {
        // TODO Auto-generated method stub
        switch (v.getId())
        {
            case R.id.button:
                Toast.makeText(MainActivity.this, "MainActivity", Toast.LENGTH_LONG).show();
                break;

            default:
                break;
        }
    }

}

    必须实现 implements View.OnClickListener,不能是 implements OnClickListener,不然会出错。

3.EditText

    它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。

    <EditText
        android:id = "@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/button"                     //保证不与上面的button重叠
        android:hint="Type something here"                   //输入框的提示性文字
        android:maxLines="2"                                           //指定了EditText的最大行数为两行,这样当输入的内容超过两行时,文本就会向上滚动,而EditText则不会继续拉伸
        />

4.ImageView

<ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height= "wrap_content"
        android:layout_below="@id/edit_text"
        android:src="@drawable/ic_launcher"
        />

点击按钮,改变显示的图片

private ImageView imageView;

 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        imageView = (ImageView)findViewById(R.id.image_view);
       
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // TODO Auto-generated method stub
                imageView.setImageResource(R.drawable.image1);
            }
        });
    }

首先需要在res/drawable-hdpi下添加图片,但是这个文件夹下所有图片的名字必须是 [a-z0-9_.],否则无法识别、

5.ProgressBar

(1)圆形进度条

<ProgressBar
        android:id = "@+id/progress_bar"
        android:layout_width = "match_parent"
        android:layout_height="wrap_content"
        />

改变控件的可见属性:visible(可见),invisible(不可见,但仍然占据位置和大小),gone(不可见,不占据位置和大小)

   private ProgressBar progressBar;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        button = (Button)findViewById(R.id.button);
        editText = (EditText)findViewById(R.id.edit_text);
        imageView = (ImageView)findViewById(R.id.image_view);
        progressBar = (ProgressBar)findViewById(R.id.progress_bar);
        //按键按下改变其可见属性
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(progressBar.getVisibility() == View.GONE)
                {
                    progressBar.setVisibility(View.VISIBLE);
                }
                else
                {
                    progressBar.setVisibility(View.GONE);
                }
            }
        });
    }

(2)水平进度条

    <ProgressBar
        android:id = "@+id/progress_bar"
        android:layout_width = "match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/image_view"
        style = "?android:attr/progressBarStyleHorizontal"
        android:max = "100"
        />

        按下按键时,进度条变化

        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                int progress = progressBar.getProgress();
                progress = progress + 10;
                if(progress > 100)
                {
                    progress = 0;
                }
                progressBar.setProgress(progress);
                
            }
        });

6.AlertDialog(警告对话框)

        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                AlertDialog.Builder  dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setTitle("This is Dialog");                                                      //标题
                dialog.setMessage("Something improtant.");                               //内容
                dialog.setCancelable(false);                                                            //不可取消,一定得进行处理
                //OK键的点击事件
                dialog.setPositiveButton("OK", new DialogInterface.OnClickListener()
                {
                    
                    @Override
                    public void onClick(DialogInterface arg0, int arg1)
                    {
                        // TODO Auto-generated method stub
                        
                    }
                });
                //Cancle键的点击事件
                dialog.setNegativeButton("Cancle", new DialogInterface.OnClickListener()
                {
                    
                    @Override
                    public void onClick(DialogInterface arg0, int arg1)
                    {
                        // TODO Auto-generated method stub
                        
                    }
                });
                dialog.show();
            }
        });

7.ProcessDialog

按键按下显示对话框

        button.setOnClickListener(new OnClickListener()9
        {
            @Override
            public void onClick(View v)
            {
                ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setTitle("This is a progressDialog");
                progressDialog.setMessage("Loading.....");
                progressDialog.setCancelable(true);                           //可关闭
                progressDialog.show();

          }

      }

若progressDialog.setCancelable(false);如此配置,表示progressDialog是不能通过Back键取消的,这是一定要在代码中做好控制,当数据加载完成后,必须要调用 progressDialog.dismiss();方法来关闭对话框,否则ProgressDialog将会一直存在。

8.ListView的简单用法

(1)在activity_main.xml布局中加入ListView控件

<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"
    tools:context="com.example.listviewtest.MainActivity" >

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>


</RelativeLayout>

(2)在MainActivity.java中添加与ListView有关的代码

public class MainActivity extends Activity
{
    private String[] data = {"Apple", "Banana", "Orange", "Watermelon", "Pear", "Grape", "Pineapple",
            "Strawberry", "Cherry", "Mango"};

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

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data);
        ListView listView  = (ListView)findViewById(R.id.list_view);
        listView.setAdapter(adapter);

    }

}

数组中的数据无法直接传递给ListView,需借助适配器完成,通过泛型<String>.来指定要适配的数据类型,然后在构造函数中把要适配的数据传入即可

将ArrayAdapter的泛型指定为String,然后在ArrayAdapter的构造函数中一次传入当前上下文、ListView子项布局的id以及要适配的数据。

在这里我们使用 android.R.layout.simple_list_item_1作为ListView子项布局的id,这是一个Android内置的布局文件,里面只有一个TextView,可用于简单显示一段文本

最后调用ListView的setAdapter方法,将构建好的适配器对象传递进去即可。

9.ListView界面定制

(1)定义一个实体类Fruit.java,作为ListView适配器的适配类型

package com.example.listviewtest;

import org.w3c.dom.NameList;

public class Fruit
{
    private String name;
    private int imageId;
    
    public Fruit(String name, int imageId)
    {
        // TODO Auto-generated constructor stub
        this.name = name;
        this.imageId = imageId;
    }
    
    public String getName()
    {
        return name;
    }
    
    public int getImageId()
    {
        return imageId;
    }
}
(2)为ListView的子项指定一个我们自定义的布局layout/fruit_item.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" >
    
    <ImageView                                                                   //用于显示水果的图片
        android:id="@+id/fruit_imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    
    <TextView                                                                       //用于显示水果的名字
        android:id="@+id/fruit_textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="10dip"
        />
</LinearLayout>

(3)创建一个自定义的适配器(FruitAdapter.java)

a.低效率
public class FruitAdapter extends ArrayAdapter<Fruit>
{
    private int resourceId;
    
    //重写构造函数,用于将上下文,ListView子项布局的id和数据都传递进来
    public FruitAdapter(Context context, int resource, List<Fruit> objects)
    {
        super(context, resource, objects);
        resourceId = resource;
    }
    
    //当每个子项被滚动到屏幕内的时候被调用,即苹果的时候调用一次,香蕉的时候再调用一次,使得运行效率低
    @Override
    public View getView(int position, View convertView, ViewGroup parent)     //
    {
        Fruit fruit = getItem(position);//获得当前项的fruit实例
        //加载ListView子项布局
        View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
        //设置具体显示信息
        ImageView fruitImage = (ImageView)view.findViewById(R.id.fruit_imageView);
        TextView fruitName = (TextView)view.findViewById(R.id.fruit_textView);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
        
    }
    
}

b.高效率

public class FruitAdapter extends ArrayAdapter<Fruit>
{
    private int resourceId;
    
    //重写构造函数,用于将上下文,ListView子项布局的id和数据都传递进来
    public FruitAdapter(Context context, int resource, List<Fruit> objects)
    {
        super(context, resource, objects);
        resourceId = resource;
    }
    
    //当每个子项被滚动到屏幕内的时候被调用
    @Override
    //三个参数分别表示:判断显示在界面上的是第几个;

    //将之前加载好的布局进行缓存,以便之后再进行重用
    //加载xml视图时使用
    public View getView(int position, View convertView, ViewGroup parent)
    {
        Fruit fruit = getItem(position);//获得当前项的fruit实例
        //加载ListView子项布局
        View view;
        ViewHolder viewHolder;      //这个类用于对控件的实例进行缓存
        if(convertView == null)
        {
            view = LayoutInflater.from(getContext()).inflate(resourceId, null);
            viewHolder = new ViewHolder();
            viewHolder.fruitImage = (ImageView)view.findViewById(R.id.fruit_imageView);
            viewHolder.fruitName = (TextView)view.findViewById(R.id.fruit_textView);
            view.setTag(viewHolder);    //将viewHolder存储在View中
        }
        else
        {
            view = convertView;
            viewHolder = (ViewHolder)view.getTag();      //将view中存储的viewHolder提取出来即可
        }
        //设置具体显示信息
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return view;
        
    }
    //用于对控件的实例进行缓存
    class ViewHolder
    {
        ImageView fruitImage;
        TextView fruitName;
        
    }
    
}

(4)MainActivity中调用

public class MainActivity extends Activity
{
    private List<Fruit> fruitList = new ArrayList<Fruit>();
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits();
        FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);
        ListView listView = (ListView)findViewById(R.id.list_view);
        listView.setAdapter(adapter);
    }
    
    private void initFruits()
    {
        Fruit apple = new Fruit("Apple", R.drawable.apple_pic);
        fruitList.add(apple);
        Fruit banana = new Fruit("Banana",R.drawable.banana_pic);
        fruitList.add(banana);
        Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
        fruitList.add(orange);
    }

}

(5)ListView的点击事件

listView.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id)
            {
                Fruit fruit = fruitList.get(position);
                Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_LONG).show();
                // TODO Auto-generated method stub
            }
        });


0 0
原创粉丝点击