Android基本控件使用
来源:互联网 发布:excel2010数据分析工具 编辑:程序博客网 时间:2024/05/16 07:39
1.TextView配置
<TextViewandroid:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
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
}
});
- Android基本控件使用
- webView控件基本使用(android)
- webView控件基本使用(android)
- Android, 基本控件的使用
- android基本控件的使用
- Android基本控件的使用
- 【Android】Android常用控件的基本使用
- Android中ExpandableListView控件基本使用
- android最基本的控件使用
- Android中ExpandableListView控件基本使用
- Android中WebView控件的基本使用
- Android中ExpandableListView控件基本使用 .
- Android中ExpandableListView控件基本使用
- Android中ExpandableListView控件基本使用
- Android中ExpandableListView控件基本使用
- Android中ExpandableListView控件基本使用
- Android中ExpandableListView控件基本使用
- Android中ExpandableListView控件基本使用
- 25.Linux: Linux系统下面: .o .a .so .ko .la区别
- 给 Android 开发者的 RxJava 详解
- LayoutParams
- vs 错误提示及解决方案
- 第四周 项目4-猴子选大王
- Android基本控件使用
- hammer.js---拖动滑块实现验证的小demo
- 寻找数组中最小的k个数(快排和堆排)
- 矩阵快速幂
- Unix网络编程之select版客户端实现
- 关于子线程里不能更新UI操作的解决方法
- Trie树
- POJ 3667 线段树区间合并
- UITableView(高级应用)