(1)src 目录用于存放代码。
(2)gen 目录用于存放对应该资源文件的代码。
(3)res 目录用于存放资源文件。
(4)res\layout 目录用于存放布局描述文件。
(5)res\values 目录用于存放常量定义文件。
package com.example.administrator.myapplication5;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity5 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main5);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
<?xml version="1.0" encoding="utf-8"?>
<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="com.example.administrator.myapplication5.MainActivity5">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.myapplication5">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity5">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
1 在Android Studio中,从res/layout目录打开activity_my.xml文件。上一节创建新项目时生成的BlankActivity,包含一个activity_my.xml文件,该文件根元素是一个包含TextView的RelativeLayout。
2 在Preview面板点击关闭右侧Preview面板,在Android Studio中,当打开布局文件时,可以看到一个Preview面板,点击这个面板中的标签,可利用WYSIWYG(所见即所得)工具在Design面板看到对应的图形化效果,但在本节直接操作XML文件即可。
3 删除 TextView 标签.
4 把 RelativeLayout 标签改为 LinearLayout.
5 为< LinearLayout >添加 android:orientation 属性并设置值为 "horizontal".
6 去掉android:padding 属性和tools:context 属性.
修改后结果如下:
res/layout/activity_my.xml
<LinearLayout 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:orientation="horizontal" >
</LinearLayout>
LinearLayout是ViewGroup的一个子类,用于放置水平或者垂直方向的子视图部件,放置方向由属性android:orientation
设定。LinearLayout里的子布局按照XML里定义的顺序显示在屏幕上。所有的Views都需要用到android:layout_width和android:layout_height这两个属性来设置自身的大小。由于LinearLayout是整个视图的根布局,所以其宽和高都应充满整个屏幕的,通过指定width 和 height属性为"match_parent"
。该值表示子View扩张自己width和height来匹配父控件的width和height。
1.1.2添加一个文本输入框Textview
与其它View一样,我们需要设置XML里的某些属性来指定EditText的属性值,以下是应该在线性布局里指定的一些属性元素:
1 在activity_my.xml文件的 < LinearLayout > 标签内定义一个 < EditText > 标签,并设置id属性为@+id/edit_message.
2 设置layout_width和layout_height属性为 wrap_content.
3 设置hint属性为一个string 值的引用edit_message.
代码如下:
res/layout/activity_my.xml
<EditText android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
android:id
这是定义View的唯一标识符。可以在程序代码中通过该标识符对对象进行引用,例如对这个对象进行读和修改的操作。当想从XML里引用资源对象的时候必须使用@符号。紧随@之后的是资源的类型(这里是id
),然后是资源的名字(这里使用的是edit_message
)。
android:layout_width 和android:layout_height
对于宽和高不建议指定具体的大小,使用wrap_content
指定之后,这个视图将只占据内容大小的空间。如果你使用了match_parent
,这时EditText将会布满整个屏幕,因为它将适应父布局的大小。
1.1.3添加一个按钮Button
1 在 Android Studio里, 编辑 res/layout下的 activity_my.xml 文件.
2 在LinearLayout 内部, 在< EditText >标签之后定义一个< Button >标签.
3 设置Button的width 和 height 属性值为 "wrap_content" 以便让Button大小能完整显示其上的文本.
4 定义button的文本使用android:text 属性,设置其值为之前定义好的 button_send 字符串.
此时的 LinearLayout 看起来应该是这样
res/layout/activity_my.xml
<LinearLayout 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:orientation="horizontal" >
<EditText
android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send" />
</LinearLayout>
这样设置对按钮来说很合适,但是对于文本框来说就不太好了,因为用户可能输入更长的文本内容。因此如果能够占满整个屏幕宽度会更好。LinearLayout使用权重属性来达到这个目的,你可以使用android:layout_weight属性来设置。
二.1listview
ListView是最经典的控件之一, ListView经常被用在列表显示上,每一个列表项都具有相同的布局,一个ListView通常都有三个要素组成:
- ListView控件
- 适配器类,用到了设计模式中的适配器模式,它是视图和数据之间的桥梁,负责提供对数据的访问,生成每一个列表项对于的View。常用的适配器类有:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter。
- 数据源 当然最重要最复杂的部分就是适配器类的编写和设计,在一些复杂的界面,常常需要对适配器类进行相关逻辑处理。
ListView的常用属性有:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
public class MainActivity extends Activity {
private ListView listView;//创建一个listview对象;
private String datas[]={ "Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday" };//准备数据源
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//复写生命周期中的onCreate()方法;
requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.lv);
//实例化ArrayAdapter
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,datas);
listView.setAdapter(adapter);//设置适配器
}
}
setContentView(R.layout.main)在Android里面,这句话是什么意思?
R.layout.main是个布局文件即控件都是如何摆放如何显示的,setContentView就是设置一个Activity的显示界面,这句话就是设置这个这句话所在的Activity采用R.layout下的main布局文件进行布局 。
使用setContentView可以在Activity中动态切换显示的View,这样就不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。但是,在android SDK给我们建的默认的Hello World程序中,调用的是setContentView(int layoutResID)方法,如果使用该方法切换view,在切换后再切换回,无法显示切换前修改后的样子,也就是说,相当于重新显示一个view,并非是把原来的view隐藏后再显示。其实setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。
对于上面的这段话,我的理解是:setContentView()方法顾名思义就是设置一个Activity的显示界面,这个方法是你在复写onCreate()方法时所获得的,在布局文件中有多种的view,例如:Textview,Listview,Imgview等view,这些view都是在布局文件所填充的内容。假如你在布局写几个Textview,那么布局中就会显示几个。如果你对里面的view做相应的修改,那么此时布局中的内容也会做相应的修改。
(2)ArrayAdapter中的参数解析:ArrayAdapter对象传入了三个参数,第一个参数是上下文对象(在这里指的是MainActivity),第二个参数是子项布局,这里调用了系统内容的布局(在这里指的是上面的布局文件),第三个参数是数据集,这里传入的是字符串数组("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")。
2.2.2SimpleAdapter适配器
ArrayAdapter适用于显示信息比较单一的场景,若显示项中包含多种形式的数据,就不太适用了,下面我们介绍一下可以适配多种数据类型的适配器类SimpleAdapter的使用方法。当存在多种数据类型时首先要考虑布局问题,因此首先要设置子项目布局文件。
布局文件与ArrayAdapter大相径庭,主程序中不同的地方在于:在设置适配器的过程中所传入的参数不同。
simpleAdapter=new SimpleAdapter(this,datas,R.layout.animal_layout,new String[]{"img","name"},new int[]{R.id.img,R.id.tv});
listView.setAdapter(simpleAdapter);//设置配置器
- context:即上下文对象,这里传入this,仍然指的是MainActivity;
- data:是一个包裹Map集合的List数据集,这里传入datas,程序初始化的数据集(数据来源是你在程序中定义data的成员函数);
- resource:子项布局文件,这里是我们自定义的animal_layout.xml文件,传入R.layout.animal_layout;
- from:是一个字符串数组,字符串指的是Map中的键值,这里有两个键,即“img”和“name”;
- to:是一个int型数组,表示子项布局中对应控件的id,这里传入ImageView的id-R.id.img和TextView的id-R.id.tv即可。
package com.example.administrator.printer_listview;
/**
* Created by Administrator on 2016/5/24.
*/
public class Animal {
public Animal(String name, String device, String statue, String size, String caozuo) {
this.name = name;
this.device = device;
this.statue = statue;
this.size = size;
this.caozuo = caozuo;
}
private String name;
private String device;
private String statue;
private String size;
private String caozuo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDevice() {
return device;
}
public void setDevice(String device) {
this.device = device;
}
public String getStatue() {
return statue;
}
public void setStatue(String statue) {
this.statue = statue;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getCaozuo() {
return caozuo;
}
public void setCaozuo(String caozuo) {
this.caozuo = caozuo;
}
public String toString(){
return super.toString();
}
}
package com.example.administrator.printer_listview;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2016/5/24.
*/
public class printer_Activity2 extends AppCompatActivity {
private ListView listView;
private List<Animal> datas = new ArrayList<Animal>();
private AnimalAdapter animalAdapter;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏
setContentView(R.layout.activity_printer2);
initDatas();
listView = (ListView) findViewById(R.id.lv);
animalAdapter = new AnimalAdapter(this, datas);//this指的是printer_Activity2
listView.setAdapter(animalAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(printer_Activity2.this, "您单击了" + datas.get(position).toString(), Toast.LENGTH_SHORT).show();
}
});
}
private void initDatas() {
Animal animal0 = new Animal("1.doxc","HPp1200", "进行中", "2.5M", "pause");
Animal animal1 = new Animal("2.pdf", "Canon MX800", "进行中", "750K", "delete");
datas.add(animal0);
datas.add(animal1);
datas.add(new Animal("3.doxc","hh", "kk", "2.4", "ll"));
datas.add(new Animal("3.doxc","hh", "kk", "2.4", "ll"));
datas.add(new Animal("3.doxc","hh", "kk", "2.4", "ll"));
datas.add(new Animal("3.doxc","hh", "kk", "2.4", "ll"));
}
}
package com.example.administrator.printer_listview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import java.util.List;
/**
* Created by Administrator on 2016/5/24.
*/
public class AnimalAdapter extends BaseAdapter {
private Context context;
private List<Animal> datas;
//构造函数需要传入两个必要的参数:上下文对象和数据源
public AnimalAdapter(Context context,List<Animal> datas) {
this.context=context;
this.datas=datas;
}
//返回子项的个数
@Override
public int getCount() {
return datas.size();
}
//返回子项对应的对象
@Override
public Object getItem(int position) {
return datas.get(position);
}
//返回子项的下标
@Override
public long getItemId(int position) {
return position;
}
//返回子项视图
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Animal animal= (Animal) getItem(position);
View view;
ViewHolder viewHolder;
if(convertView==null){
view = LayoutInflater.from(context).inflate(R.layout.animal_layout,null);
viewHolder=new ViewHolder();
viewHolder.animalName=(TextView)view.findViewById(R.id.name);
viewHolder.animalDevice=(TextView)view.findViewById(R.id.device);
viewHolder.animalStatue=(TextView)view.findViewById(R.id.statue);
viewHolder.animalSize=(TextView)view.findViewById(R.id.size);
view.setTag(viewHolder);//存放数据;
}else{
view=convertView;
viewHolder= (ViewHolder) view.getTag();
}
viewHolder.animalName.setText(animal.getName());
viewHolder.animalDevice.setText(animal.getDevice());
viewHolder.animalStatue.setText(animal.getStatue());
viewHolder.animalSize.setText(animal.getSize());
return view;
}
//创建ViewHolder类
class ViewHolder{
TextView animalName;
TextView animalDevice;
TextView animalStatue;
TextView animalSize;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:orientation="vertical"
tools:context="com.example.administrator.printer_listview.printer_Activity2>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/name"
android:layout_width="50dip"
android:layout_height="30dp"
android:layout_gravity="center"
android:layout_weight="1"
android:text="文档名 "
android:textSize="10sp" />
<TextView
android:id="@+id/device"
android:layout_width="59dp"
android:layout_height="30dp"
android:layout_gravity="center"
android:text="设备 "
android:textSize="10sp" />
<TextView
android:id="@+id/statue"
android:layout_width="50dip"
android:layout_height="30dp"
android:layout_gravity="center"
android:layout_weight="1"
android:text="状态"
android:textSize="10sp" />
<TextView
android:id="@+id/size"
android:layout_width="50dip"
android:layout_height="30dp"
android:layout_gravity="center"
android:layout_weight="1"
android:text="大小 "
android:textSize="10sp" />
<TextView
android:id="@+id/caozuo"
android:layout_width="50dip"
android:layout_height="30dp"
android:layout_gravity="center"
android:layout_weight="1"
android:text="操作 "
android:textSize="10sp" />
</LinearLayout>
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below ="@+id/lv"
android:layout_above="@+id/RelativeLayout"/>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<Button
android:text ="暂停所有"
android:id="@+id/button1"
android:layout_weight="1"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:text ="开始所有"
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_toLeftOf="@+id/button1"
android:layout_height="wrap_content" />
<Button
android:text ="取消所有"
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_toLeftOf="@+id/button2"
android:layout_height="wrap_content" />
<Button
android:text ="完成"
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_alignParentRight="true"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<View
android:layout_width="0.5px"
android:layout_height="match_parent"
android:background="#B8B8B8"
android:visibility="visible" />
<TextView
android:id="@+id/name"
android:textSize="10sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"
/>
<View
android:layout_width="0.5px"
android:layout_height="match_parent"
android:background="#B8B8B8"
android:visibility="visible" />
<TextView
android:id="@+id/device"
android:textSize="10sp"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<View
android:layout_width="0.5px"
android:layout_height="match_parent"
android:background="#B8B8B8"
android:visibility="visible" />
<TextView
android:id="@+id/statue"
android:gravity="center_horizontal"
android:textSize="10sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" />
<View
android:layout_width="0.5px"
android:layout_height="match_parent"
android:background="#B8B8B8"
android:visibility="visible" />
<TextView
android:id="@+id/size"
android:textSize="10sp"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content" />
<Button
android:text="暂停"
android:id="@+id/button5"
android:layout_width="39dp"
android:layout_height="wrap_content" />
<Button
android:text="删除"
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>