Android第十天

来源:互联网 发布:云杉网络融资 编辑:程序博客网 时间:2024/05/22 13:54

1.掌握三种Menu

第一种:OptionMenu选项菜单:

创建菜单:(Android提供了两种创建菜单的方式)
1、在java代码创建菜单;
2、使用xml资源文件创建菜单(res/menu目录下)。建议使用后者。
XML资源文件中定义菜单:
1、普通菜单:
 <item        android:id="@+id/menu_about"        android:orderInCategory="2"        android:showAsAction="never"        android:title="关于"/>

2、二级普通菜单:
 <item        android:id="@+id/menu_group2"        android:orderInCategory="1"        android:showAsAction="never"        android:title="文字颜色">        <menu >            <group>                <item android:id="@+id/font_red" android:title="red" />                <item android:id="@+id/font_green" android:title="green"></item>                <item android:id="@+id/font_blue" android:title="blue"></item>                <item android:id="@+id/font_yellow" android:title="yellow"></item>            </group>        </menu>    </item>

3、二级可选项菜单:
 <item        android:id="@+id/menu_group1"        android:orderInCategory="1"        android:showAsAction="never"        android:title="文字尺寸">        <menu >
            <!-- android:checkableBehavior 属性有三个可选值:all为多选,single为单选,none为不可选。为none时就是一个普通菜单 -->
            <group android:checkableBehavior="single">                <item android:id="@+id/font_10" android:title="10sp"></item>                <item android:id="@+id/font_15" android:title="15sp"></item>                <item android:id="@+id/font_20" android:title="20sp"></item>                <item android:id="@+id/font_25" android:title="25sp"></item>                <item android:id="@+id/font_30" android:title="30sp"></item>            </group>        </menu>    </item>


(四)、菜单操作:
            利用boolean onOptionsItemSelected(MenuItem item)回调方法。

核心代码如下:利用以上定义的xml菜单文件,实现通过菜单选项对文字的大小和颜色进行控制。
        @Override        public boolean onOptionsItemSelected(MenuItem item) {                switch (item.getItemId()) {                case R.id.font_20:                        text_main_info.setTextSize(20);                        break;                case R.id.font_30:                        text_main_info.setTextSize(30);                        break;                case R.id.font_red:                        text_main_info.setTextColor(Color.RED);                        break;                case R.id.font_green:                        text_main_info.setTextColor(Color.GREEN);                        break;                }                return super.onOptionsItemSelected(item);        }

第二种:上下文菜单

上下文菜单的使用:

步骤:

1.为一个View关联一个上下文

registerForContextMenu(View)

2.实现创建上下文菜单的方法

CreateContextMenu();

public classMainActivity extends Activity {

         private TextView tv;

 3.实现点击事件的选择器

onContextItemSelected();

===============================================

         @Override

         protected void onCreate(BundlesavedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

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

                   //1.textView关联一个上下文

                   registerForContextMenu(tv);

         }

         //2.实现创建上下文菜单的方法

         @Override

         public void onCreateContextMenu(ContextMenu menu,View v,

                            ContextMenuInfomenuInfo) {

                   menu.setHeaderIcon(R.drawable.ic_launcher);

                   menu.setHeaderTitle("修改信息");

                   menu.add(0, 1, 0, "修改颜色");

                   menu.add(0, 2, 1, "修改字体");

                   menu.add(0, 3, 2, "删除");

         }

         //3.实现点击的选择器

         @Override

         public boolean onContextItemSelected(MenuItemitem) {

                   // TODO Auto-generated methodstub

                   switch (item.getItemId()) {

                   case 1:

                            tv.setTextColor(Color.RED);

                            break;

                   case 2:

                            tv.setTextSize(20);

                            break;

                   case 3:

                            tv.setText("");

                            break;

                   default:

                            break;

                   }

                   returnsuper.onContextItemSelected(item);

         }

}


综合应用:

布局:

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="fill_parent"

   android:layout_height="fill_parent"

    android:orientation="vertical">

 

    <ListView

        android:id="@+id/listView_main_info"

       android:layout_width="match_parent"

       android:layout_height="wrap_content" >

    </ListView>

 

</LinearLayout>

子布局:

<?xmlversion="1.0" encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

    android:orientation="vertical">

 

    <EditText

       android:id="@+id/editText_name"

       android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:ems="10"

        android:hint="请输入新的名字"

       android:inputType="textPersonName" >

 

        <requestFocus />

    </EditText>

 

</LinearLayout>

 

逻辑代码:

public classMainActivity extends Activity {

         private ListView lv;

         private String[] arrName = new String[]{ "唐僧", "悟空", "猪八戒", "沙和尚" };

         private ArrayAdapter<String>adapter = null;

         private List<String> list =null;

         @Override

         protected void onCreate(BundlesavedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                   lv=(ListView)findViewById(R.id.lv);

                   list=newArrayList<String>();

                   //1.数据源

                   for (int i = 0; i <arrName.length; i++) {

                            list.add(arrName[i]);

                   }

                   //2.构建适配器

                   adapter=newArrayAdapter<String>(MainActivity.this,android.R.layout.simple_expandable_list_item_1, list);

                   //3.绑定

                   lv.setAdapter(adapter);

                   //4.注册上下文菜单

                   registerForContextMenu(lv);

         }

         //5.创造上下文菜单

         @Override

         public void onCreateContextMenu(ContextMenumenu, View v,

                            ContextMenuInfomenuInfo) {

                   // TODO Auto-generated methodstub

           //设置基本信息

                   menu.setHeaderIcon(R.drawable.ic_launcher);

                   menu.setHeaderTitle("西游记");

                   //添加子菜单

                   menu.add(0, 1, 0, "修改名字");

                   menu.add(0, 2, 1, "删除名字");

                   menu.add(0, 3, 2, "取消");

                   super.onCreateContextMenu(menu,v, menuInfo);

         }

         //6.响应点击事件

         @Override

         public booleanonContextItemSelected(MenuItem item) {

                   // TODO Auto-generated methodstub

                   //难点,重点

                   final AdapterContextMenuInfoinfo=(AdapterContextMenuInfo) item.getMenuInfo();

                   switch (item.getItemId()) {

                   case 1:

                            //创AlerDialog的构建器

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

              //设置基本信息

                            builder.setIcon(R.drawable.ic_launcher);

                            builder.setTitle("修改信息");

                           

                            ViewdialogView=getLayoutInflater().inflate(R.layout.alertdialog_item, null);

                            final EditTextet=(EditText) dialogView.findViewById(R.id.editText_name);

              //添加布局

                            builder.setView(dialogView);

                            builder.setPositiveButton("确定", new OnClickListener() {

                                    

                                     @Override

                                     public voidonClick(DialogInterface dialog, int which) {

                                               //TODO Auto-generated method stub

                                               Stringname=et.getText().toString().trim();

                                               list.set(info.position,name);

                      //因为数据是和适配器绑定的所以只要更新适配器就可以了

                                               adapter.notifyDataSetChanged();

                                     }

                            });

                            builder.create().show();

                            break;

                   case 2:

                            list.remove(info.position);

                            adapter.notifyDataSetChanged();

                            break;

 

                   default:

                            break;

                   }

                   returnsuper.onContextItemSelected(item);

         }

 

}

第三种:

PopuWindow的使用:弹出性窗口

packagecom.jason.menu;

importandroid.net.Uri;

importandroid.os.Bundle;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.drm.DrmStore.Action;

importandroid.view.Gravity;

importandroid.view.KeyEvent;

importandroid.view.Menu;

importandroid.view.View;

importandroid.view.View.OnClickListener;

import android.view.ViewGroup.LayoutParams;

importandroid.widget.ImageView;

importandroid.widget.PopupWindow;

 

public classMainActivity extends Activity {

         private PopupWindow popupWindow=null;

         private View contentView=null;

        

         @Override

         protected void onCreate(BundlesavedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

 

                   contentView= getLayoutInflater().inflate(

                                     R.layout.popuwindow_item,null);

                  

                   // 1.创建一个弹出式窗口

                   popupWindow = newPopupWindow(contentView,

                                     LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);

 

                   // 2.

                   ImageView imageView_back =(ImageView) contentView

                                     .findViewById(R.id.imageView1);

                   imageView_back.setOnClickListener(new OnClickListener() {

 

                            @Override

                            public void onClick(Viewv) {

                                     // TODOAuto-generated method stub

 

                            }

                   });

 

                   ImageView imageView_share =(ImageView) contentView

                                     .findViewById(R.id.imageView2);

                   imageView_share.setOnClickListener(newOnClickListener() {

 

                            @Override

                            public voidonClick(View v) {

                                     // TODOAuto-generated method stub

                                    

                            }

                   });

 

                   ImageView imageView_conlect =(ImageView) contentView

                                     .findViewById(R.id.imageView3);

                  

                   imageView_conlect.setOnClickListener(newOnClickListener() {

                           

                            @Override

                            public void onClick(Viewv) {

                                     Intentintent =new Intent();

                                     intent.setAction(Intent.ACTION_SENDTO);

                                     intent.setData(Uri.parse("smsto:13822101945"));

                                     intent.putExtra("sms_body","hello!");

                                     startActivity(intent);

                            }

                   });

         }

 

         @Override

         //专门用来获取菜单按钮和回退按钮的触发器

         public boolean onKeyDown(int keyCode,KeyEvent event) {

                   switch (keyCode) {

                   case KeyEvent.KEYCODE_BACK:

                            if(popupWindow.isShowing()){

                                     popupWindow.dismiss();

                            }

                            break;

                   case KeyEvent.KEYCODE_MENU:

                            if(popupWindow.isShowing()){

                                     popupWindow.dismiss();

                            }else{

                                     popupWindow.showAtLocation(contentView,Gravity.BOTTOM, 0, 0);

                            }

                            break;

                   default:

                            break;

                   }

                   returnsuper.onKeyDown(keyCode, event);

         }

        

         @Override

         public boolean onCreateOptionsMenu(Menumenu) {

                   // Inflate the menu; thisadds items to the action bar if it is present.

                   getMenuInflater().inflate(R.menu.main,menu);

                   return false;

         }

}





掌握AlertDialog的使用:

分类:
  1. AlertDialog   警告对话框(提示对话框)
  2. ProgressDialog    进度对话框
  3. DatePickerDialog   日期选择对话框
  4. TimePickerDialog   时间选择对话框
  5. 自定义对话框登录对话框、关于对话框)
  6. 列表对话框
    • 普通列表对话框
    • 单选列表对话框
    • 多选列表对话框
    • 带图标的列表对话框
第一种:AlertDialog(提示对话框)

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

                            // 设置builder的属性

                            builder.setIcon(R.drawable.ic_launcher);

                            builder.setTitle("提示!");

                            builder.setMessage("这是一个普通的AlertDialog!");

 

                            // 创建Action Button

                            builder.setPositiveButton("确定", new OnClickListener() {

 

                                     @Override

                                     public voidonClick(DialogInterface dialog, int which) {

                                               Toast.makeText(MainActivity.this,"你确定要退出吗?", 0).show();

                                     }

                            });

 

                            builder.setNegativeButton("取消", new OnClickListener() {

 

                                     @Override

                                     public voidonClick(DialogInterface dialog, int which) {

                                               Toast.makeText(MainActivity.this,"你确定要取消吗?", 0).show();

                                     }

                            });

 

                            builder.setNeutralButton("不操作", new OnClickListener() {

 

                                     @Override

                                     public voidonClick(DialogInterface dialog, int which) {

 

                                     }

                            });

 

                            // 创建一个AlertDialog

                            builder.create().show();


第二种:ProgressDialog    进度对话框

private ProgressDialog progressDialog;
progressDialog=new ProgressDialog(context);
progressDialog.setTitle("提示");
progressDialog.setMessage("正在下载,请稍候");
progressDialog.setIcon(R.drawable.ic_launcher);


//显示
progressDialog.show();


//关闭
progressDialog.dismiss();


第三种:单选的对话框

AlertDialog.Builder builder4 = new AlertDialog.Builder(this);
builder4.setTitle("选择字体");
builder4.setIcon(R.drawable.ic_launcher);


// 1. 数据源
final String[] arrFont = new String[] { "10sp", "12sp", "14sp",
"16sp" };


// 2. 设置
builder4.setSingleChoiceItems(arrFont, 0, new OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
position = which;
}
});


builder4.setPositiveButton("确定", new OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
switch (position) {
case 0:
Toast.makeText(MainActivity.this, "10sp", 0).show();
break;
case 1:
Toast.makeText(MainActivity.this, "12sp", 0).show();
break;
case 2:
Toast.makeText(MainActivity.this, "14sp", 0).show();
break;
case 3:
Toast.makeText(MainActivity.this, "16sp", 0).show();
break;
default:
break;
}
}
});


builder4.create().show();

第四种:多选对话框

AlertDialog.Builder builder5 = new AlertDialog.Builder(this);
builder5.setTitle("选择兴趣爱好");
builder5.setIcon(R.drawable.ic_launcher);


// 1. 数据源
final String[] arrHobby = new String[] { "读书", "打球", "看电影", "睡觉" };
// map =new HashMap<Integer, Boolean>();
final boolean[] pos = new boolean[arrHobby.length];


// 2. 设置
builder5.setMultiChoiceItems(arrHobby, null,
new OnMultiChoiceClickListener() {


@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
System.out.println(which);
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
map.put(which, isChecked);
list.add(map);


// pos[which] =isChecked;
}
});


builder5.setPositiveButton("确定", new OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
// System.out.println(which);
// boolean state=map.get(which);
// if(state){
// Toast.makeText(MainActivity.this, "选择了:"+arrHobby[which],
// 0).show();
// }
// StringBuffer sb =new StringBuffer();
// sb.append("你勾选了:");
// for (int i = 0; i < pos.length; i++) {
// if(pos[i]){
// sb.append(arrHobby[i]);
// sb.append(",");
// }
// }

StringBuffer sb =new StringBuffer();
sb.append("你勾选了:");


Toast.makeText(MainActivity.this, sb.toString(), 0).show();
}
});
builder5.create().show();

第五种:自定义对话框

// 1. 创建视图View
View dialogview = getLayoutInflater().inflate(R.layout.dialog_item,
null);


final TextView textView_main_name = (TextView) dialogview
.findViewById(R.id.editText_main_name);
final TextView textView_main_pwd = (TextView) dialogview
.findViewById(R.id.editText_main_pwd);


AlertDialog.Builder builder6 = new AlertDialog.Builder(this);
builder6.setTitle("登录信息");
builder6.setIcon(R.drawable.ic_launcher);


// 2. 为dialog绑定一个view
builder6.setView(dialogview);


// 3. 设置ActionButton
builder6.setPositiveButton("确定", new OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
String name = textView_main_name.getText().toString();
String pwd = textView_main_pwd.getText().toString();


Toast.makeText(MainActivity.this, name + ":" + pwd, 0)
.show();
}
});


builder6.setNegativeButton("取消", new OnClickListener() {


@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
textView_main_name.setText(" ");
textView_main_pwd.setText(" ");
}
});


// 4. 创建Dialog并显示
builder6.create().show();


通知的使用:

第一种:普通的通知

创建普通通知的步骤:

1.       定义一个NotificationManager管理器并且实例化

private NotificationManager manager;

manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

2.       构建通知的Builder

NotificationCompat.Builder builder=newNotificationCompat.Builder(this);

3.       设置必要属性

builder.setSmallIcon(R.drawable.ic_launcher);

                            builder.setContentTitle("普通的通知");

                            builder.setContentText("通知来了");

4.       添加附件属性

//添加声音

                            builder.setSound(Uri.parse("android.resource://"+

                            getPackageName()+

                            "/"+R.raw.a));

                            //添加滚动

                            builder.setTicker("sjdlkjjjjjjjjjjjjjjjjjjjjjjjjsdjk;fjfjlsdkjfsdjflsdf"+

                                               "dskjfkldsssdjflkkkkkkkkkkkkjfsldjfs"+

                                               "d;skfjjjjjjjjjjjjjjjjjjf");

                            //点击时跳到另外一个界面

//public static PendingIntent getActivity (Context context, int requestCode, Intent intent, int flags)

 

                            Intentintent=new Intent(MainActivity.this, Second.class);

                            PendingIntentpIntent=PendingIntent.getActivity(MainActivity.this,100, intent,PendingIntent.FLAG_UPDATE_CURRENT);

                            builder.setContentIntent(pIntent);

5.       Builder创建一个通知对象

Notification notification=builder.build();

6.       发布通知

manager.notify(1,notification);

第二种 带进度条的通知

public class MainActivity extends Activity {

       private NotificationManagermanager;

       private intsize=0;

       privateString urlString = "http://m2.qiushibaike.com/article/list/suggest?page=";

       @Override

       protectedvoid onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.activity_main);

              manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

       }

       public voidclickButton(View view){

              switch(view.getId()) {

              caseR.id.button1:

                     newMyAsyncTask(this,manager).execute(urlString);

                     break;

 

              default:

                     break;

              }

       }

       public classMyAsyncTask extends AsyncTask<String, Integer,byte[]>{

              privateContext context;

              privateNotificationCompat.Builder builder=null;

              privateNotificationManager manager=null;

              publicMyAsyncTask(Context context,NotificationManager manager) {

                     this.context=context;

                     builder=newNotificationCompat.Builder(context);

                     builder.setSmallIcon(R.drawable.ic_launcher);

                     builder.setContentTitle("带进度条的通知");

                     builder.setContentText("通知来了!");

                     builder.setProgress(100,0,false);

                     this.manager=manager;

              }

              @Override

              protectedvoid onPreExecute() {

                     manager.notify(1,builder.build());

              }

              @Override

              protectedbyte[] doInBackground(String... params) {

                     //TODO Auto-generated method stub

                     InputStreamis=null;

                     ByteArrayOutputStreambos=null;

                     HttpURLConnectionconnection=null;

                     try{

                            URLurl=new URL(params[0]);

                            connection=(HttpURLConnection)url.openConnection();

                            connection.setConnectTimeout(2000);

                            connection.setRequestMethod("GET");

                            connection.setDoInput(true);

                            connection.setRequestProperty("Accept-Encoding","identity");

                    

                            connection.connect();

                            intsum=connection.getContentLength();

                            System.out.println("==================="+sum);

                            if(connection.getResponseCode()==200) {

                                   is=connection.getInputStream();

                                   byte[]b=newbyte[10];

                                   intlen=-1;

                                   bos=newByteArrayOutputStream();

                                   while((len=is.read(b))!=-1) {

                                          bos.write(b,0, len);

                                          bos.flush();

                                          size+=len;

                                          publishProgress((int)(size/(float)sum*100));

                                         

                                   }

                            }

                     }catch (Exception e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                     }

                     returnbos.toByteArray();

              }

              @Override

              protectedvoid onProgressUpdate(Integer... values) {

                     builder.setProgress(100,values[0], false);

                     manager.notify(1,builder.build());

              }

              @Override

              protectedvoid onPostExecute(byte[] result) {

                     builder.setProgress(0,0, false);

                     manager.notify(1,builder.build());

                    

              }

             

       }

      

}


第三种:大视图的通知

1.     定义一个NotificationManager管理器并且实例化

2.     构建通知的builder对象

3.     设置必须属性

4.     设置.setStyle方法

     InboxStyle inboxStyle = new InboxStyle();

                            inboxStyle.setBigContentTitle("Eventtracker details:");

                            for(int i = 0; i < 10; i++) {

                                     inboxStyle.addLine("jason"+ i);

                            }

                           

                            builder1.setStyle(inboxStyle);

5.     创建通知对象并发布

manager.notify(2, builder1.build());
0 0
原创粉丝点击