zoukankan      html  css  js  c++  java
  • android初探

    1.dialog对话框:

    A.警告对话框:AlertDialog,可以有0到3个按钮,一个单选框或复选框列表的对话框,警告对话框可创建大多数的交互界面,是推荐的类型

    B.进度对话框ProgressDialog:显示一个进度环或进度条,由于它是AlertDialog的扩展,所以也支持按钮

    C.日期选择对话框DatePickerDialog:让用户选择一个日期

    D.时间选择对话框TimePickerDialog:让用户选择一个时间

    E.如果你希望自定义对话框,可以扩展

    2.创建对话框:

    A.普通的告警对话框:

    创建AlertDialog的方式:

    AlertDialog.Builder builder=new AlertDialog.Builder(this);

    //设置警告信息,设置对话框不可取消(不能用back键取消)

    builder.setMessage(“你确定退出吗”).setCancelable(false)

    //设置警告按钮

    .setPositiveButton(“确定”,new DialogInterface.OnClickListener(){

    public void onClick(DialogInterface dialog,int id){

    MyActivity.this.finish();

    }

    }

    .setNegativeButton(“取消”,new AlertDialog.OnClickListener(){

    public void onClick(DialogInterface dialog,int id){

    Dialog.cancel();

    }

    });

    AlertDialog alert=builder.create();

    alert.show();//显示对话框

    B.创建具有可选项的AlertDialog对话框:

    final CharSequence[] items={“红”,”绿”,”蓝”};

    AlertDialog.Builder builder=new AlertDialog.Builder(this);

    builder.setTitle(“请选择一种颜色:”);

    builder.setItems(items,new DialogInterface.OnClickListener(){

    public void onClick(DialogInterface dialog,int item){

    Toast.makeText(getApplicationContext(),items[item],

    Toast.LENGTH_SHORT).show();

    }

    });

    AlertDialog alert=builder.create();

    alert.show();//显示对话框

    C.创建单选框和多选框

    final CharSequence[] items={“红”,”绿”,”蓝”};

    AlertDialog.Builder builder=new AlertDialog.Builder(this);

    builder.setTitle(“请选择一种颜色:”);

    builder.setSingleChoiceItems(items,-1,new DialogInterface.OnClickListener(){

    public void onClick(DialogInterface dialog,int item){

    Toast.makeText(getApplicationContext(),items[item],

    Toast.LENGTH_SHORT).show();

    }

    });

    AlertDialog alert=builder.create();

    alert.show();//显示对话框

    第二个参数表示默认选中的选项位置,使用-1表示默认情况下不选中任何选项

    创建多选列表使用setMultiChoiceItems()方法

    D.创建进度条对话框

    ProgressDialog progressDialog;

    progressDialog=new ProgressDialog(mcontext);

    //设置进度条显示样式

    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

    //设置进度条显示内容

    progressDialog.setMessage(“Loading...”);

    //进度条是否可取消

    progressDialog.setCancelable(false);

    E.信息内容是一个简单的view类型

    new AlertDialog.Builder(this).setTitle(“请输入”)

    .setIcon(R.drawable.ic_dialog_info)

    .setView(new EditText(this))

    .setPositiveButton(“确定”,null)

    .setNegativeButton(“取消”,null).show();

    F.信息内容是一组单选框

    new AlertDialog.Builder(this).setTitle(“单选框”)

    .setIcon(R.drawable.ic_dialog_info)

    .setSingleChoiceItems(new String[]{“item1”,”item2”},0,new DialogInterface.OnClickListener(){

    public void onClick(DialogInterface dialog,int which){

    dialog.dismiss();

    }

    }).setNegativeButton(“取消”,null).show();

    G.信息内容是一组复选框

    new AlertDialog.Builder(this).setTitle(“复选框”)

    .setMultiChoiceItems(new String[]{“item1”,“item2”},null,null)

    .setPositiveButton(“确定”,null)

    .setNegativeButton(“取消”,null).show();

    H.信息内容是一组简单的列表

    new AlertDialog.Builder(this).setTitle(“列表框”)

    .setItems(new String[]{“item1”,”item2”})

    .setPositiveButton(“确定”,null).show();

    I.信息内容为一个自定义的布局文件

    LayoutInflater inflater=getLayoutInflater();

    View view=inflater.inflate(R.layout.dialog,null);

    new AlertDialog.Builder(this).setTitle(“自定义布局”)

    .setPositiveButton(“确定”,null)

    .setNegaviteButton(“取消”,null).show();

    3.五大布局:

    A.线性布局LinearLayout,线性布局以设置的垂直或水平属性值,来排列所有的子元素。所有的子元素都会排列在其他元素之后,因此一个垂直列表的每一行只有一个元素,而一个水平列表只有一个行高,

    线性布局保持子元素之间的间隔以及互相对齐。线性布局还支持为单独的子元素设置weight,好处是允许子元素填充屏幕的剩余空间,子元素指定weight值,剩余的空间就会按照子元素的weight比例分配给子元素,weight用法归纳:按比例划分水平方向,将涉及到的view的android:width设置为0dp,然后设置android:

    Weight为相应的比例即可;竖直方向,只需设置android:height为0dp,之后设置weight属性即可。

    ViewGroup继承自View,AbsoluteLayout,LinearLayout,FrameLayout,RelativeLayout继承自ViewGroup,TableLayout继承自LinearLayout

     <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent" android:orientation="vertical">
     <EditText android:text="EditText"
           android:id="@+id/editText1"
          android:gravity=”center”
           android:layout_height="wrap_content"
           android:layout_width="fill_parent">
     </EditText>
      <LinearLayout android:id="@+id/linearLayout1"
          android:layout_height="fill_parent"
          android:layout_width="fill_parent"
          android:gravity="right">

    <Button android:id=@+id/btn

    Android:text=”button”/>

    </LinearLayout>

    </LinearLayout>

       android:gravity属性设置管理器内组件的对齐方式,该属性支持top,bottom,left,right,center_vertical,fill_vertical,center_horizontal,

    fill_horizontal,center,fill,

       clip_horizontal,clip_vertical几个属性,也可以同时指定多重对齐方式的组合,如left|center_vertical代表出现在屏幕左边,而且垂直居中

    B.表格布局TableLayout,表格布局将子元素的位置分配到行或列中,一个TableLayout由多个TableRow组成,每一个TableRow都会有一个row。表格布局不会显示row,columns和cell的边框线。表格允许单元格为空,单元格不能跨列,如果直接向TableLayout添加组件,那么该组件将直接占一行

    a. 代码示例:
    <?xml version="1.0" encoding="utf-8"?>

    <TableLayout     xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width=”fill_parent”

    android:layout_height=”fill_parent”

    android:stretchColumns=”1”>

    <TableRow>

    <TextView android:layout_column=”1”

    android:padding=”3dip”

    Android:text=”1row”/>

    </TableRow>

    <TableRow>

    <TextView android:layout_column=”1”

    android:padding=”3dip”

    Android:text=”2row”/>

    </TableRow>

    </TableLayout>

    b. 其他xml属性:

    android:collapseColumns:设置需要被隐藏的列序号,多个序列号之间用逗号隔开

    android:shrinkColumns:设置允许被收缩的列的列序号,多个序列号之间用逗号隔开

    android:stretchColumns:设置允许被拉伸的列的列序号,多个序列号之间用逗号隔开

    C.相对布局RelativeLayout,相对布局允许子元素指定它们相对于其他元素或父元素的位置(通过ID指定)。因此,你可以右对齐,或上下或置于屏幕的中央的形式来排列元素。元素按顺序排列,因此如果第一个元素位于屏幕的中央,那么相对这个元素的其他元素将以屏幕中央的相对位置来排列。

    a.代码示例:

    <RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width=”fill_parent”

    android:layout_height=”fill_parent”

    <TextView android:id=”@+id/label”

    android:layout_width=”fill_parent”

    android:layout_height=”wrap_content”

    Android:text=”欢迎访问我的博客”/>

    <EditText android:id=”@+id/entry”

    android:layout_width=”fill_parent”

    android:layout_height=”wrap_content”

    android:layout_below=”@id/label”/>

    <Button android:id=”@+id/btn”

    android:layout_width=”wrap_content”

    android:layout_height=”wrap_content”

    android:layout_below=”@id/label”

    android:layout_alignParentRight=”true”

    android:layout_marginLeft=”10dip”

    android:text=”OK”/>

    <Button android:layout_width=”wrap_content”

    android:layout_height=”wrap_content”

    android:layout_toLeftOf=”@id/btn”

    android:layout_alignTop=”@id/btn”

    android:text=”取消”/>

    </RelativeLayout>

    b.android:layout_toRightOf:控制该子组件位于给出id组件的右侧, android:layout_toRightOf: 控制该子组件位于给出id组件的左侧

    android:layout_above: 控制该子组件位于给出id组件的上方;android:layout_below: 控制该子组件位于给出id组件的下方

    android:layout_alignTop: 控制该子组件位于给出id组件的上边界对齐;android:layout_alignBottom: 控制该子组件位于给出id组件的下边界对齐

    android:layout_alignLeft: 控制该子组件位于给出id组件的左边界对齐;android:layout_alignRight: 控制该子组件位于给出id组件的右边界对齐

    值均为给出组件的id:android:layout_alignLeft=”@id/view”

    D.绝对布局AbsoluteLayout,绝对布局可以让子元素指定准确的x,y坐标并显示在屏幕上。(0,0)为左上角,当向下或向右移动时坐标值变大。绝对布局没有页边框,允许元素之间相互重叠(尽管不推荐)。

    E.框架布局FrameLayout,框架布局被定制为屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象。所有的子元素都会固定在屏幕的左上角,不能为框架布局的一个子元素指定位置,后一个子元素将会直接在前一个子元素上进行填充覆盖,把它们部分或全部挡住。

    4.活动之间的跳转:

    A.startActivity(Intent):只是从当前界面跳到另外一个界面,两个界面不再有联系

    B.startActivityForResult(intent):可以经当前界面认为当前界面为一个父窗体,要跳转的界面为子窗体,当子窗体关闭时,父窗体会执行onActivityResult()方法,并可以获得子窗体的返回值

    C.代码:

    Intent intent=new Intent();

    //传递参数

    intent.putExtra(“myText”,”你好,第二个活动”);

    intent.setClass(MainActivity.this,SecondActivity.class);

    startActivity(intent);

    SecondActivity中获取参数代码:

    //从MainActivity跳转到SecondActivity利用Intent传递参数

    Intent intent=getIntent();

    String info=intent.getStringExtra(“myText”);

    注:SecondActivity需在activityMainfest当中进行注册

    使用Bundle传递参数:

    Intent intent=new Intent();

    Bundle bundle=new Bundle();

    bundle.putString(“info”,”你好”);

    intent.putExtras(bundle);

    intent.setClass(MainActivity.this,SecondActivity.class);

    startActivity(intent);

    SecondActivity中获取参数代码:

    Bundle bundle=this.getIntent().getExtras();

    String text=bundle.getString(“info”);

    5.android使用http协议与服务器通信:

    A.android目前只提供两种http 通信方式,HttpURLConnection和HttpClient,HttpURLConnection多用于接收和发送流式数据,因此比较适合上传和下载文件

    B.HttpClient通信流程:

    a创建HttpClient对象,该对象可用来多次发送不同的http请求

    b.创建HttpPost或HttpGet对象,设置参数,每发送一次http请求,都需要这样一个对象

    c.利用HttpClient的execute方法发送请求并等待结果,该方法会一直阻塞当前线程,直到返回结果或抛出异常

    d.针对结果或异常做相应处理

    C.需考虑的问题:

    a.HttpClient对象可以重复使用,可以作为类的静态变量

    b.HttpGet和HttpPost一般无法重复使用,可创建一个方法用来初始化,同时设置一些需要上传到服务器的资源

    c.目前android不再支持在UI线程中发起http请求,这样会阻塞UI线程,因此还需要一个子线程发送http请求,执行execute方法

    d.不同的请求对应不同的返回结果,对于如何处理结果(一般都是json或UI更新),需要一定的自由度

    e.简单来说,每次需要发送http 请求时,开一个子线程用于发送请求,子线程接收到结果或抛出异常时,根据情况向UI线程发送message,最后在UI线程的handler或handleMessage方法中做结果解析和UI更新

    D.代码示例:

    public class MainActivity extends Activity{

    //模拟器把自己当成localhost,服务器应为10.0.2.2

    private static String url=”http://10.0.2.2:8080/PDAServer/login.action”;

    private static Handler handler=new Handler();

    protected void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

    getPDAServiceData(url);

    }

    //请求服务

    private void getPDAServiceData(String url){

    url+=”?username=123456”;

    HttpClient client=new DefaultHttpClient();

    HttpPost request;

    //以下红色字体需处理异常

    request=new HttpPost(new URL(url));

    HttpReponse response=client.execute(request);

    //判断请求是否成功

    if(reponse.getStatusLine().getStatusCode==200){

    HttpEntity entity=reponse.getEntity();

    if(entity!=null){

    String out=EntityUtils.toString(entity);

    //将从服务器获取的数据展示出来,使用多线程的方式

    handler.post(new Runnable(){

    public void run(){

    new AlertDialog.Builder(this).setMessage(out).create().show();

    }

    });

    }

    }

    }

    }

    6.Handler多线程处理

    A.Handler,直接继承自Object,它允许发送和处理message或Runnable对象,并且会关联到主线程MessageQueue中,每个handler就是一个单独的线程,并且关联到消息队列的线程。

    当实例化一个handler时,它就承载着一个线程和一个消息队列的线程,这个线程就可以把message或Runnable压入到消息队列,并且从消息队列中取出message或Runnable,进而操作他们

    B.Handler主要有两个作用:在工作线程中发送消息;在UI线程中获取、处理消息

    C.Handler压入消息队列有两大体系:post和sendMessage

    a.Post:Post允许把一个Runnable对象压入到消息队列中。它的方法有:post(Runnable),postAtTime(Runnable,long),postDelayed(Runnable,long)

    b.sendMessage:sendMessage允许把一个包含消息数据的Message对象压入到消息队列中,它的方法有:

    sendEmptyMessage(int),sendMessage(Message),sendMessageAtTime(Message,long),sendMessageDelayed(Message,long)

    D.Post:对于handler的post方式来说,它会传递一个Runnable对象到消息队列中,在Runnable对象中重写run方法,一般在这个run方法中写入需要在UI现呈上进行的操作,关于post方式的方法:

    a.boolean post(Runnable r):把一个Runnable对象入队到消息队列中,UI线程从消息队列中取出这个对象后,立即执行

    b.boolean postAtTime(Runnable r,long uptimeMillis):把一个Runnable对象入队到消息队列中,UI线程从消息队列中取出这个对象后,在特定的时间执行

    c.boolean postDelayed(Runnable r,long delayMillis):把一个Runnable对象入队到消息队列中,UI线程从消息队列中取出这个对象后,延迟delayMillis秒执行

    d.void removeCallbacks(Runnable r):从消息队列中移除一个Runnable对象

    e.代码示例:

    public class HandlerPostActivity extends Activity{

    private Button btn1,btn2;

    private TextView testView;

    //声明一个Handler对象

    pirvate Handler handler=new Handler();

    protected void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

    btn1=(Button)findViewById(R.id.btn1);

    btn2=(Button)findViewById(R.id.btn2);

    testView=(TextView )findViewById(R.id.testView);

    btn1.setOnClickListener(new View.OnClickListener(){

    public void click(View v){

    //新启动一个子线程

    new Thread(new Runnable(){

    public void run(){

    //使用post方式修改UI组件testView的text属性

    handler.post(new Runnable(){

    public void run(){

    testView.setText(“使用handler 的post方式在工作线程中发送一段执行到消息队列中,在主线程中执行”);

    }

    }

    }

    }).start();

    }

    });

    btn1.setOnClickListener(new View.OnClickListener(){

    public void click(View v){

    //新启动一个子线程

    new Thread(new Runnable(){

    public void run(){

    //使用postDelayed方式修改组件testView的text属性

    handler.postDelayed(new Runnable(){

    public void run(){

    testView.setText(“使用handler postDelayed发送一段到消息队列中国,在主线程中延迟3s执行”);

    }

    },3000);

    }

    }).start();

    }

    });

    }

    注意:对于post方式而言,它其中Runnable对象的run方法,均执行在UI线程上,所以对于这段代码而言,不能执行在UI线程上的操作,一样无法使用post方式

    f.代码示例2:使用post方式从互联网上获取一张图片,并显示ImageView中

    public class HandlerPostActivity extends Activity{

    private Button btn;

    private ImageView imageView;

    private static String image_path = "http://ww4.sinaimg.cn/bmiddle/786013a5jw1e7akotp4bcj20c80i3aao.jpg";

    private ProgressDialog dialog;

    //一个静态的handler,handler建议声明为静态的

    private static Handler handler=new Handler();

     protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

     setContentView(R.layout.asynctask_activity);

    btn=(Button)findViewById(R.id.btn);

    imageView=(ImageView)findById(R.id.imageView);

    //设置进度条提示

    dialog=new ProgressDialog(this);

    dialog.setTitle(“提示”);

    dialog.setMessage(“正在下载,请稍后...”);

    dialog.setCancelable(false);

    btn.setOnClickListener(new View.OnClickListener(){

    public void onClick(View v){

    //开启一个子线程,用于下载图片

    new Thread(new MyThread()).start();

    dialog.show();

    }

    });

    }

    public class MyThread implements Runnable{

    public void run(){

    //下载一个图片

    HttpClient client=new DefaultHttpClient();

    HttpGet httpGet=new HttpGet(image_path);

    HttpReponse httpReponse=null;

    //红色字体需处理异常

    httpResponse=client.execute(httpGet);

     if (httpResponse.getStatusLine().getStatusCode() == 200) {

    byte[] data=EntityUtils.toByteArray(httpResponse.getEntity());

    //得到一个bitmap对象,并且为了使能够在post访问,必须声明为final

    final Bitmap bmp=BitmapFactory.decodeByteArray(data,0,data.length);

    handler.post(new Runnable(){

    public void run(){

    imageView.setImageBitmap(bmp);

    }

    });

    //隐藏对话框

    dialog.dismiss();

    }

    }

    }

    }

    D.Message

    a.Handler如果使用sendMessage的方式把消息入队到消息队列中,需传递一个Message对象,而在Handler中需重写handleMessage()方法,用于获取工作线程传递过来的消息,此方法应用在UI线程上

    b.Message是一个final类,所以不可被继承。Message封装了线程中传递的消息,如果对于一般的数据,Message提供了getData()和setData()方法来获取与设置参数,其中操作的数据是一个Bundle对象,

    Bundle对象提供了一系列getXXX()和setXXX()方法用于传递基本数据类型的键值对。对于复杂的数据类型,Bundle提供了两个方法:putParcelable(String key,Parcelable value):需要传递的对象类实现Parcelable接口;

    pubSerializable(String key,Serializable value):需要传递的对象类实现Serializable接口。

    c.另一种方式在Message中传递对象,即使用Message自带的obj属性传值,它是一个Object类型,可以传递任意类型的对象,Message自带如下属性:

    int arg1:参数一,用于传递不复杂的参数,复杂数据使用setData()传递

    int arg2:参数二,用于传递不复杂的参数,复杂数据用setData()传递

    Object obj:传递一个任意的对象

    int what:定义的消息码,一般用于设定消息的标志

    d.对于Message对象,一般不建议通过构造方法得到,而是建议通过使用Message.obtain()静态的方法或Handler.obtainMessage()获取。Message.obtain()会从消息池中获取一个Message对象,如果消息池是空的,才会使用构造方法实例化一个Message对象,这样有利于消息资源的利用。不用担心消息池中的消息过多,它的上限是10个

    e.代码示例:

    public class HandleMessageActivity extends Activity{

    private Button btn;

    private ImageView imageView;

    private static String image_path=”http://ww4.sinaimg.cn/bmiddle/786013a5jw1e7akotp4bcj20c80i3aao.jpg”;

    private ProgressDialog dialog;

    private static int IS_FINISH=1;

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

     setContentView(R.layout.asynctask_activity);

    btn=(Button)findViewById(R.id.btn);

    imageView=(ImageView)findViewById(R.id.imageView);

    //设置进度条提示

    dialog=new ProgressDialog(this);

    dialog.setTitle(“提示”);

    dialog.setMessage(“正在下载,请稍后...”);

    dialog.setCancelable(false);

    btn.setOnClickListener(new View.OnClickListener(){

    public void onClick(View v){

    //开启一个子线程,用于下载图片

    new Thread(new MyThread()).start();

    dialog.show();

    }

    });

    private Handler handler=new Handler(){

    //在Handler中获取消息,重写handleMessage()方法

    public void handleMessage(Message msg){

    //判断消息码是否为空

    if(msg.what==IS_FINISH){

    byte[] data=(byte[])msg.obj;

    Bitmap bmp=BitmapFactory.decodeByteArray(data,0,data.length);

    imageView.setImageBitmap(bmp);

    dialog.dismiss();

    }

    }

    };

    public class MyThread implements Runnable{

    public void run(){

    HttpClient client=new DefaultHttpClient();

    HttpGet httpGet=new HttpGet(image_path);

    HttpResponse httpResponse=null;

    //红色字体部分需处理异常

    httpResponse=client.execute(httpGet);

    if(httpResponse.getStatusLine().getStatusCode()==200){

    byte[] data=EntityUtils.toByteArray(httpResponse.getEntity());

    //获取一个Message对象,设置what为1

    Message msg=Message.obtain();

    msg.obj=data;

    msg.what=IS_FINISH;

    //发送这个消息到消息队列中

    handler.sendMessage(msg);

    }

    }

    }

    }

    7.android使用http协议与服务器通信(HttpURLConnection)

    A.get方式:

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.asynctask_activity);

    //采用get方式访问服务器

    String strurl=”http://192.168.0.100:8080/AndroidJ2eeServlet/ServletTest?param=helloworld”;

    URL url=null;

    //红色字体部分需处理异常

    url=new URL(strurl);

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();

    InputStreamReader in=new InputStreamReader(conn.getInputStream());//向J2ee服务器发送消息

    BufferedReader bufferReader=new BufferedReader(in);

    String result=””;

    String readLine=null;

    while((readLine=bufferReader.readLine())!=null){

    result+=readLine;

    }

    in.close();

    conn.disconnect();

    TextView textView=(TextView)findViewById(R.id.textView);

    textView.setText(result);

    }

    B.post方式:

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.asynctask_activity);

    //采用post方式向服务端传送数据以及从服务器接收数据

    String strUrl=”http://192.168.0.100:8080/AndroidJ2eeServlet/ServletTest”;

    URL url=null;

    //红色字体部分需处理异常

    url=new URL(strUrl);

    HttpURLConnection conn=(HttpURLConnection)url.openConnection();

    conn.setDoInput(true);//设置输入流采用字节流

    conn.setOutput(true);//设置输出流采用字节流

    conn.setRequestMethod(“POST”);

    conn.setUseCaches(false);//设置缓存

    conn.setRequestProperty(“content-type”,”application/x-www-form-urlencoded”);//设置meta参数

    conn.setRequestProperty(“Charset”,”utf-8”);

    conn.connect();//连接既向服务器发送消息

    DataOutputStream dop=new DataOutputStream(conn.getOutputStream());

    dop.writeBytes(“param=”+URLEncode.encode(“Q:下周去钓鱼”,”utf-8”));//发送参数

    dop.flush();

    dop.close();

    //以下是接收工作

    BufferedReader bufferReader=new BufferedReader(new InputStreamReader(conn.getInputStream()));

    String result=””;

    String readLine=null;

    while((readLine=bufferReader.readLine())!=null){

    result+=readLine;

    }

    bufferReader.close();

    conn.disconnect();

    //将接收到的数据显示出来

    TextView textView=(TextView)findViewById(R.id.result);

    textView.setText(URLDecode.decode(result,”utf-8”);

    }

    8.android界面

    A.android生成屏幕有三种方式:xml配置生成;通过用户界面接口生成;直接用代码生成

    B.View类,任何一个View对象都继承android.View类,它是一个存储有屏幕上特定的一个矩形布局和内容属性的一个布局。一个View对象可以处理测距、布局、焦点变换和滚动条,以及屏幕区域自己表现的按键和手势。作为一个基类,一个view对象为Widget,Widget则是一组用于绘制交互屏幕元素的完全实现子类,Widget可以处理自己的测距和绘图,所以可以用它们快速的构建UI,可用到的Widget包括Text,EditText,Button,RadioButton,CheckBox和ScrollView

    C.ViewGroup,是一个android.view,ViewGroup的对象,ViewGroup是一个特殊的View对象,它的功能是装载和管理一组下层的View和其他ViewGroup

    D.TextView对象,示例:

    TextView textView=(TextView)findById(R.id.textView);

    textView.setTextColor(Color.RED);

    textView.setTextSize(20);

    textView.setBckgroundColor(Color.BLUE);

    textView.setString(“我是一个文本”);

    E.Toast,提示类:

    Toast toast=Toast.makeText(this,”我是一个提示”,Toast.LENGTH_SHORT);

    toast.setGravity(Gravity.TOP,0,220);//设置提示的位置

    toast.show();//显示提示

    F.单项选择:RadioButton,RadioGroup,选项按钮可以通过RadioButton来实现,“答案”则通过RadioGroup 来实现,在xml配置文件中:

    <RadioButton...>

    <RadioGroup.../>

    <RadioGroup.../>

    </RadioButton>

    G多项选择(CheckBox),xml配置文件

    <CheckBox../>

    <CheckBox.../>

    <CheckBox.../>

    H.下拉列表:Spinner,xml文件

    <Spinner android;id=”@+id/spinner”

    android:layout_width=”wrap_content”

    android:layout_height=”wrap_content”

    android:layout_cneterHorizontal=”true”/>

    java代码:

    priavate static final String[] items={“O型”,”A型”,”B型”,”AB型”};

    Spinner spinner=(Spinner)findById(R.id.spinner);

    //将可选内容与ArrayAdapter关联

    ArrayAdapter adapter=new ArrayAdapter<String>(this,R.layout.simple_spinner_item,items);

    //设置下拉列表的风格

    adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);

    //将adapter添加到spinner中

    spinner.setAdapter(adapter);

    I.自动提示(AutoCompeleteTextView)

    J.日期和时间(DatePicker,TimePicker):首先需要在布局文件中定义DatePicker和TimePicker,然后通过Calendar获取系统日期,接着通过init方法将日期传给DatePicker,并设置      OnDateChangedListener来监听日期改变,当时间被改变设置setOnTimeChangedListener监听时间的改变,

    java文件:

    public void onCreate(Bundle savedInstanceState){

    super.onCreated(saveInstanceState);

    setContentView(R.layout.main);

    Calendar c=Calendar.getInstance();

    //获取DatePicker对象

    DatePicker datePicker=(DatePicker)findViewById(R.id.datePicker);

    //将日历初始化为当前时间,并设置监听事件

    datePicker.init(c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH),new DatePicker.OnDateChangedListener(){

    @Override

    public void onDateChanged(DatePicker view,int year,int monthOfYear,int dayOfMonth){

    //当日期更改时在这里进行处理

    c.set(year,monthOfYear,dayOfMonth);

    }

    });

    //获取TimePicker对象

    TimePicker timePicker=(TimePicker)findViewById(R.id.timePicker);

    //设置为24小时显示制

    timePicker.setIs24HourView(true);

    timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener(){

    @Override

    public void onTimeChanged(TimePicker view,int hourOfDay,int minute){

    //时间改变处理

    c.set(year,month,day,hourOfDay,minute,second);

    }

    });

    }

    xml配置文件:

    <DatePicker

    android:layout_width=”wrap_content”

    android:layout_height=”wrap_content”

    android:id=”@+id/datePicker”>

    </DatePicker>

    <TimePicker

    android:id=”@+id/timePicker”

    android:layout_width=”wrap_content”

    android:layout_height=”wrap_content”>

    </TimePicker>

    9.android小知识:

    A.实例化一个res/layout/main.xml:通过类LayoutInflate可以对布局xml文件实例化

    a.LayoutInflate inflate=LayoutInflate.from(Context context);进而可以创建一个试图

    View view=inflate.inflate(R.layout.main,null);//即创建了main.xml文件的试图,可以动态的创建或者修改改xml文件

    b.LayoutInflater inflater=getLayoutInflater();//调用activity的getLayoutInflater();方法

    c.LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    B.创建Activity时,如果单击事件较多,Activity可实现OnClickListener接口;

    View continueBtn=findViewById(R.id.continue_btn);

    continueBtn.setOnClickListener(this);

    View newBtn=findViewById(R.id.new_btn);

    newBtn.setOnClickListener(this);

    //实现的单击方法

    public void click(View v){

    switch(v.getId()){

    case R.id.continue_btn:

    //执行一些操作

    break;

    case R.id.new_btn:

    //执行一些操作

    break;

    default:

    break;

    }

    }

    10.菜单(menu):

    两种方式创建菜单:

    通过xml布局文件创建:

    <menu xmlnx=””>

    <item android:id=”@+id/about”

    android:title=”关于”/>

    <item android:id=”@+id/exit”

    android:title=”退出”/>

    </menu>

    java代码:

    //创建发方法

     public boolean onCreateOptionsMenu(Menu menu){

    MenuInflate inflater=getMenuInflater();

    //设置menu界面为menu.xml

    inflater.inflater(R.menu.menu,menu);

    return true;

    }

    通过menu.add方法添加

    //创建发方法

     public void onCreateOptionsMenu(Menu menu){              

    menu.add(0,0,0,R.string.ok);

    menu.add(0,1,1,R.string.back);

    return true;

    }

    11.A.ImageView:将一张图片显示在屏幕上,需要创建一个显示图片的对象,这个对象就是ImageView,然后通过setImageResource来设置要显示的图片资源索引

    B.ImageButton:要创建带图标的Button,首先要在布局文件中定义ImageButton,然后通过setImageDrawable方法来设置按钮要显示的图标

    C.拖动效果(Gallery)

    D.切换图片(ImageSwitcher)

    E.网格视图(GridView):GridView的视图排列方式与矩阵类似,当屏幕上由很多元素(文字,图片或其他元素)需要显示时可以使用GridView来显示。既然有多个元素需要显示,就要使用BaseAdapter来存储这些元素

    F.ScrollView卷轴视图:

    G.进度条ProgressBar,android提供两类进度条样式:长型进度条和圆型进度条

    H.拖动条SeekBar:拖动条类似进度条,不同的是拖动条用户可以控制;由于拖动条用户可以控制,所以需要对其进行事件监听,需要实现SeekBar.OnSeekBarChangeListener接口,在    SeekBar中需要监听三个事件:数值的改变(onProgressChanged)、开始拖动(onStartTackingTouch)、停止拖动(onStopTrackingTouch)

    I.状态栏提示(Notification,NotificationManager):android提供了NotificationManager来管理状态栏信息,提供Notification来处理这些讯息。首先通过getSystenService()得到    NotificationManager对象,我们可以对Notification的内容、标题和图标等属性进行设置。,然后通过notify方法来执行一个Notification快讯

    J.TabWidget:TabWidget类似电话薄中的界面,通过多个标签切换显示不同的内容。首先需了解TabHost,它是一个用来存放多个Tab标签的容器

    12.Bitmap类:用于获取图像文件信息,进行图像的旋转、平移和缩放等,并可以指定保存文件格式

    A.可以通过来获取该图像对象Bitmap:

    Bitmap bitmap=(BitmapDrawable)getResource().getDrawable(R.drawable.fuwa).getBitmap();

    B.获得图像资源后,可以使用drawBitmap()方法将图像显示到屏幕(x,y)坐标上,方法:Canvas.drawBitmap(bitmap,x,y,null);

    C.要获得图像信息,可以通过bitmap.getHeight()获得图像高度,通过bitmap.getWidth()获得图像宽度

    D.实现图像的平移,只需改变Canvas.drawBitmap(bitmap,x,y,null)方法中的x,y,即可

    E.图像的旋转:用Matrix实现图像旋转,Matrix是一个3*3的矩阵,专门用于图像变换匹配。Matrix没有结构体,必须初始化,可以通过reset()或set()方法实现吗matrix.reset()

    初始化之后,就可以使用setRotate()方法设置旋转的角度:matrix.setRotate()。

    旋转角度设置完毕之后,可以使用createBitmap()方法创建一个经过旋转处理的Bitmap对象

    bitmapRotate=Bitmap.createBitmap(bitmap,0,0,bitmapWidth,bitmapHeight,matrix,true);

    13.android颜色编码表:

    <resources>

    <color name="white">#ffffff</color><!--白色 --> <color name="ivory">#fffff0</color><!--象牙色 -->

    <color name="lightyellow">#ffffe0</color><!--亮黄色 --> <color name="yellow">#ffff00</color><!--黄色 -->

    <color name="snow">#fffafa</color><!--雪白色 --> <color name="floralwhite">#fffaf0</color><!--花白色 -->

    <color name="lemonchiffon">#fffacd</color><!--柠檬绸色 --> <color name="cornsilk">#fff8dc</color><!--米绸色 -->

    <color name="seaShell">#fff5ee</color><!--海贝色 --> <color name="lavenderblush">#fff0f5</color><!--淡紫红 -->

    <color name="papayawhip">#ffefd5</color><!--番木色 --> <color name="blanchedalmond">#ffebcd</color><!--白杏色 -->

    <color name="mistyrose">#ffe4e1</color><!--浅玫瑰色 --> <color name="bisque">#ffe4c4</color><!--桔黄色 -->

    <color name="moccasin">#ffe4b5</color><!--鹿皮色 --> <color name="navajowhite">#ffdead</color><!--纳瓦白 -->

    <color name="peachpuff">#ffdab9</color><!--桃色 --> <color name="gold">#ffd700</color><!--金色 -->

    <color name="pink">#ffc0cb</color><!--粉红色 --> <color name="lightpink">#ffb6c1</color><!--亮粉红色 -->

    <color name="orange">#ffa500</color><!--橙色 --> <color name="lightsalmon">#ffa07a</color><!--亮肉色 -->

    <color name="darkorange">#ff8c00</color><!--暗桔黄色 --> <color name="coral">#ff7f50</color><!--珊瑚色 -->

    <color name="hotpink">#ff69b4</color><!--热粉红色 --> <color name="tomato">#ff6347</color><!--西红柿色 -->

    <color name="orangered">#ff4500</color><!--红橙色 --> <color name="deeppink">#ff1493</color><!--深粉红色 -->

    <color name="fuchsia">#ff00ff</color><!--紫红色 --> <color name="magenta">#ff00ff</color><!--红紫色 -->

    <color name="red">#ff0000</color><!--红色 --> <color name="oldlace">#fdf5e6</color><!--老花色 -->

    <color name="lightgoldenrodyellow">#fafad2</color><!--亮金黄色 --> <color name="linen">#faf0e6</color><!--亚麻色 -->

    <color name="antiquewhite">#faebd7</color><!--古董白 --> <color name="salmon">#fa8072</color><!--鲜肉色 -->

    <color name="ghostwhite">#f8f8ff</color><!--幽灵白 --> <color name="mintcream">#f5fffa</color><!--薄荷色 -->

    <color name="whitesmoke">#f5f5f5</color><!--烟白色 --> <color name="beige">#f5f5dc</color><!--米色 -->

    <color name="wheat">#f5deb3</color><!--浅黄色 --> <color name="sandybrown">#f4a460</color><!--沙褐色 -->

    <color name="azure">#f0ffff</color><!--天蓝色 --> <color name="honeydew">#f0fff0</color><!--蜜色 -->

    <color name="aliceblue">#f0f8ff</color><!--艾利斯兰 --> <color name="khaki">#f0e68c</color><!--黄褐色 -->

    <color name="lightcoral">#f08080</color><!--亮珊瑚色 --> <color name="palegoldenrod">#eee8aa</color><!--苍麒麟色 -->

    <color name="violet">#ee82ee</color><!--紫罗兰色 --> <color name="darksalmon">#e9967a</color><!--暗肉色 -->

    <color name="lavender">#e6e6fa</color><!--淡紫色 --> <color name="lightcyan">#e0ffff</color><!--亮青色 -->

    <color name="burlywood">#deb887</color><!--实木色 --> <color name="plum">#dda0dd</color><!--洋李色 -->

    <color name="gainsboro">#dcdcdc</color><!--淡灰色 --> <color name="crimson">#dc143c</color><!--暗深红色 -->

     <color name="palevioletred">#db7093</color><!--苍紫罗兰色 --> <color name="goldenrod">#daa520</color><!--金麒麟色 -->

    <color name="orchid">#da70d6</color><!--淡紫色 --> <color name="thistle">#d8bfd8</color><!--蓟色 -->

    <color name="lightgray">#d3d3d3</color><!--亮灰色 --> <color name="lightgrey">#d3d3d3</color><!--亮灰色 -->

    <color name="tan">#d2b48c</color><!--茶色 --> <color name="chocolate">#d2691e</color><!--巧可力色 -->

    <color name="peru">#cd853f</color><!--秘鲁色 --> <color name="indianred">#cd5c5c</color><!--印第安红 -->

    <color name="mediumvioletred">#c71585</color><!--中紫罗兰色 --> <color name="silver">#c0c0c0</color><!--银色 -->

    <color name="darkkhaki">#bdb76b</color><!--暗黄褐色 --> <color name="rosybrown">#bc8f8f</color><!--褐玫瑰红 -->

    <color name="mediumorchid">#ba55d3</color><!--中粉紫色 --> <color name="darkgoldenrod">#b8860b</color><!--暗金黄色 -->

    <color name="firebrick">#b22222</color><!--火砖色 --> <color name="powderblue">#b0e0e6</color><!--粉蓝色 -->

    <color name="lightsteelblue">#b0c4de</color><!--亮钢兰色 --> <color name="paleturquoise">#afeeee</color><!--苍宝石绿 -->

    <color name="greenyellow">#adff2f</color><!--黄绿色 --> <color name="lightblue">#add8e6</color><!--亮蓝色 -->

    <color name="darkgray">#a9a9a9</color><!--暗灰色 --> <color name="darkgrey">#a9a9a9</color><!--暗灰色 -->

    <color name="brown">#a52a2a</color><!--褐色 --> <color name="sienna">#a0522d</color><!--赭色 -->

    <color name="darkorchid">#9932cc</color><!--暗紫色 --> <color name="palegreen">#98fb98</color><!--苍绿色 -->

    <color name="darkviolet">#9400d3</color><!--暗紫罗兰色 --> <color name="mediumpurple">#9370db</color><!--中紫色 -->

    <color name="lightgreen">#90ee90</color><!--亮绿色 --> <color name="darkseagreen">#8fbc8f</color><!--暗海兰色 -->

    <color name="saddlebrown">#8b4513</color><!--重褐色 --> <color name="darkmagenta">#8b008b</color><!--暗洋红 -->

    <color name="darkred">#8b0000</color><!--暗红色 --> <color name="blueviolet">#8a2be2</color><!--紫罗兰蓝色 -->

    <color name="lightskyblue">#87cefa</color><!--亮天蓝色 --> <color name="skyblue">#87ceeb</color><!--天蓝色 -->

    <color name="gray">#808080</color><!--灰色 --> <color name="grey">#808080</color><!--灰色 -->

    <color name="olive">#808000</color><!--橄榄色 --> <color name="purple">#800080</color><!--紫色 -->

    <color name="maroon">#800000</color><!--粟色 --> <color name="aquamarine">#7fffd4</color><!--碧绿色 -->

    <color name="chartreuse">#7fff00</color><!--黄绿色 --> <color name="lawngreen">#7cfc00</color><!--草绿色 -->

    <color name="mediumslateblue">#7b68ee</color><!--中暗蓝色 --> <color name="lightslategray">#778899</color><!--亮蓝灰 -->

    <color name="lightslategrey">#778899</color><!--亮蓝灰 --> <color name="slategray">#708090</color><!--灰石色 -->

    <color name="slategrey">#708090</color><!--灰石色 --> <color name="olivedrab">#6b8e23</color><!--深绿褐色 -->

    <color name="slateblue">#6a5acd</color><!--石蓝色 --> <color name="dimgray">#696969</color><!--暗灰色 -->

    <color name="dimgrey">#696969</color><!--暗灰色 --> <color name="mediumaquamarine">#66cdaa</color><!--中绿色 -->

    <color name="cornflowerblue">#6495ed</color><!--菊兰色 --> <color name="cadetblue">#5f9ea0</color><!--军兰色 -->

    <color name="darkolivegreen">#556b2f</color><!--暗橄榄绿 --> <color name="indigo">#4b0082</color><!--靛青色 -->

    <color name="mediumturquoise">#48d1cc</color><!--中绿宝石 --> <color name="darkslateblue">#483d8b</color><!--暗灰蓝色 -->

    <color name="steelblue">#4682b4</color><!--钢兰色 --> <color name="royalblue">#4169e1</color><!--皇家蓝 -->

    <color name="turquoise">#40e0d0</color><!--青绿色 --> <color name="mediumseagreen">#3cb371</color><!--中海蓝 -->

    <color name="limegreen">#32cd32</color><!--橙绿色 --> <color name="darkslategray">#2f4f4f</color><!--暗瓦灰色 -->

    <color name="darkslategrey">#2f4f4f</color><!--暗瓦灰色 --> <color name="seagreen">#2e8b57</color><!--海绿色 -->

    <color name="forestgreen">#228b22</color><!--森林绿 --> <color name="lightseagreen">#20b2aa</color><!--亮海蓝色 -->

    <color name="dodgerblue">#1e90ff</color><!--闪兰色 --> <color name="midnightblue">#191970</color><!--中灰兰色 -->

    <color name="aqua">#00ffff</color><!--浅绿色 --> <color name="cyan">#00ffff</color><!--青色 -->

    <color name="springgreen">#00ff7f</color><!--春绿色 --> <color name="lime">#00ff00</color><!--酸橙色 -->

    <color name="mediumspringgreen">#00fa9a</color><!--中春绿色 --> <color name="darkturquoise">#00ced1</color><!--暗宝石绿 -->

    <color name="deepskyblue">#00bfff</color><!--深天蓝色 --> <color name="darkcyan">#008b8b</color><!--暗青色 -->

    <color name="teal">#008080</color><!--水鸭色 --> <color name="green">#008000</color><!--绿色 -->

    <color name="darkgreen">#006400</color><!--暗绿色 --> <color name="blue">#0000ff</color><!--蓝色 -->

    <color name="mediumblue">#0000cd</color><!--中兰色 --> <color name="darkblue">#00008b</color><!--暗蓝色 -->

    <color name="navy">#000080</color><!--海军色 --> <color name="black">#000000</color><!--黑色 -->

    </resources>

    14.使用HttpClient接口实现网络通信:

    A.DefaultHttpClient:DefaultHttpClient是HttpClient的一个直接子类,是一个默认的HTTP客户端,可以使用它创建一个HTTP连接。在HTTP中提供了多个重载的execute()方法,用来执行http请求

    B.HttpRequest接口:HttpGet和HttpPost是HttpRequest的直接子类,分别用于向服务器提交get请求和post请求

    C.HttpResponse接口:HttpResponse接口提供了Http的响应信息,其中getEntity() 方法用于获得响应消息的实体,getStatusLine()方法用于获取响应的状态行,在返回结果statusLine中包含了HTTP响应的状态码,可以使用方法getStatusCode()方法获得

    15.ViewGroup.MarginLayoutParams用于控制子组件周围的页边距:

    android:layout_marginBottom该子组件下边的页边距;android:layout_marginLeft该子组件左边的页边距;

    android:layout_marginRight该子组件右边的页边距;android:layout_marginTop: 该子组件上边的页边距

       对于view的尺寸,android给了三种单位供选择使用:

          px:像素;dp:dip,表示屏幕实际的像素;

          sp:会根据系统设定的字体大小进行缩放,与dp类似,通常用与设置字体

    尺寸单位的选择技巧:如果设置长度、高度等属性可以使用dp;如果设置字体,推荐使用sp;在屏幕适配方面,不推荐使用px,因为使用dp或sp,UI会根据设备的density和scaleDensity进行等比例缩放,以达到不同屏幕适配的效果,让其在不同的屏幕看起来差不多的效果。

    16.子activity向父activity返回结果,实现子activity向父activity发送返回信息,有以下两种方法可调用:

    public final void setResult(int resultCode);

    public final void setResult(int resultCode,Intent data);

    通常来说,resultCode是以下两个预定义常量的任意一个:

       Activity.RESULT_OK;Activity.RESULT_CANCELED;如果需自定义结果代码,还可以使用另一个常量:RESULT_FIRST_USER;

    17.fragment

    A. fragment的特性:

    a. Fragment总是作为Activity界面组成部分,Fragment可以通过getActivity()方法获取所在的activity,activity可以通过调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取fragment;

    b. 在activity运行时,可调用FragmentManager的add(),remove(),replace()方法动态的操作Fragment

    c. 一个Activity可同时组合多个Fragment,一个Fragment可以被多个Activity复用

    d. Fragment可以响应输入事件并有自己的生命周期,但其生命周期被其所在的activity生命周期所控制

    B. 创建Fragment:

    a. 创建Fragment需要继承Fragment基类或Fragment的子类,Fragment的子类有:DialogFragment,ListFragment,PreferenceFragment或者WebViewFragment,与创建activity类似,fragment需要实现一些回调方法:onCreate(),onCreateView(),onStart(),onResume(),onPause(),onStop()等,通常会重写以下三个方法:

    onCreate():系统创建Fragment后回调该方法,初始化必要组件

    onCreateView():当Fragment绘制界面组件时调用该方法,该方法返回一个view,该view就是Fragment显示的view

    onPause():离开fragment调用该方法

    b. 代码示例:

    @Override

    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){

       //加载fragment_main.xml布局文件

       View rootView=inflater.inflate(R.layout.fragment_main,container,false);

       return rootView;

    }

    C. Fragment添加到Activity:创建好的Fragment只有添加到Activity才能起作用,添加到Activity有两种方法:

    a. 在布局文件中使用<Fragment…/>元素添加Fragment,android:name指定Fragment的实现类;

    <LinearLayout …>

       <Fragment  android:name=”com.myfragment.test.MyFragment”

            android:id=”@+id/fragment”

            android:layout_width=”wrap_content”

            android:layout_height=”match_parent”/>

    </LinearLayout>

    注:每个fragment都需要提供一个唯一的标识,为fragment提供id有三种方法:

    ① android:id属性提供一个唯一的标识

    ② 用android:tag属性提供一个唯一的字符串

    ③ 如果上述两个属性都没有,系统会使用其容器视图(View)的id

    b. 在java代码中,通过FragmentTransaction对象的add()方法来添加Fragment

    @Override

    protected void onCreate(Bundle savedInstanceState){

       super.onCreate(savedInstanceState);

       //加载容器

       setContentView(R.layout.activity_main);

       //添加fragment

       getFragmentManager().beginTransaction().add(R.id.container,new MyFragment()).commit();

    }

    activity_main.xml布局文件如下所示:

    <FrameLayout xmlns:android=”…”

       android:id=”@+id/container”

       android:layout_width=”match_parent”

       android:layout_height=”match_parent”/>

    注:Activity的getFragmentManager()方法可以返回FragmentManager,FragmentManager的beginTransaction()方法可开启并返回FragmentTransaction对象

    D. Fragment与Activity通信

    a. Fragment添加到Activity后,fragment和activity必须实现通信,这就需要fragment能够获取activity,activity能够获取到fragment:

    Fragment获取它所在的Activity:调用fragment的getActivity()即可获取到fragment的activity

    Activity获取它所拥有的Fragment:调用Activity关联的FragmentManager的findFragmentById(int id)或findFragmentByTag(String tag)即可获取指定的fragment

            注:在布局文件中<Fragment…/>元素添加fragment时,可以指定android:id或android:tag属性,用于标识该fragment

    b. Fragment与Activity传递数据:

    Activity向Fragment传递数据:在Activity中创建Bundle数据包,并调用fragment的setArguments(Bundle bundle)方法将Bundle数据包传递给fragment

    Fragment向Activity传递数据或activity需要在Fragment运行时实时获取数据:在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现回调接口

    E. Fragment管理与Fragment事务:

    a.Activity管理Fragment主要通过FragmentManager,通过FragmentManager可以完成以下几个功能:

    使用findFragmentById()和findFragmentByTag()获取指定的Fragment

    调用popBackStack()将Fragment从后台栈中弹出,

    调用addOnBackStackChangeListener()注册一个监听器,用于监听后台栈的变化

    c. 借助FragmentTransaction实现删除、添加、替换Fragment,FragmentTransaction代表Activity对Fragment执行的多个改变,代码示例:

    //打开事务,获取FragmentManager

    FragmentManager fm=getFragmentManager();

    FragmentTransaction transaction=fm.beginTransaction();

    //创建一个新的Fragment

    Fragment fragment=new MyFragment();

    //替换container容器的fragment

    transaction.replace(R.id.container,fragment);

    //将事务添加到back栈,允许用户按下back键返回到上一个状态

    transaction.addToBackStack(null);

    transaction.commit();

    18.weight属性详解:

    A. layout_gravity和gravity区别:layout_gravity表示的是组件自身在父组件中的位置,gravity表示的是组件的子组件在组件中的位置

    B. 作为父layout的LinearLayout的属性android:orientation=”vartical”时,android:layout_gravity属性设为横向的时候才能生效,如left,right,

    center_horizontal;当android:orientation=”horizontal”时,android:layout_gravity属性设为纵向的时候才能生效,如top,bottom,

    center_vertical

  • 相关阅读:
    Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)
    股市投资策略总结(转)
    php学习笔记--高级教程--读取文件、创建文件、写入文件
    史上最简单的Hibernate入门简单介绍
    Java中StringBuilder的清空方法比較
    DHCP Option 60 的理解
    ICMP报文分析
    软件測试自学指南---从入门到精通
    Qt多线程学习:创建多线程
    Bulk Insert命令具体
  • 原文地址:https://www.cnblogs.com/zijinyouyou/p/6490955.html
Copyright © 2011-2022 走看看