zoukankan      html  css  js  c++  java
  • Android学习笔记_30_常用控件使用

         一、状态栏通知(Notification):

       如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息。发送消息的代码如下:

       public void sendNotice(View v){
            int icon=android.R.drawable.stat_notify_chat;
            //第一个参数为图标,第二个参数为标题,第三个为通知时间
              Notification notification = new Notification(icon, "通知", System.currentTimeMillis());
            notification.defaults = Notification.DEFAULT_SOUND;//发出默认声音
             //打开通知时要启动的activity
            Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:15901681812"));
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, 0);
            notification.setLatestEventInfo(this, "新消息", "时间到,请拨打电话", pendingIntent);
            notification.flags = Notification.FLAG_AUTO_CANCEL;//自动取消
             //获取通知管理器
             NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            manager.notify(11, notification);//第一个参数为自定义的通知唯一标识
       }

         二、对话框通知(Dialog Notification)

       当你的应用需要显示一个进度条或需要用户对信息进行确认时,可以使用对话框来完成。下面代码将打开一个如右图所示的对话框:

    public void notifcation() {
            new AlertDialog.Builder(this)
                    .setTitle("AlertDialog测试")
                    .setCancelable(false)
                    // 设置不能通过“后退”按钮关闭对话框
                    .setMessage("AlertDialog学习?")
                    .setPositiveButton("确认", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialoginterface, int i) {
                            Uri uri = Uri.parse("http://www.itcast.cn/");// 打开链接
                            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                            startActivity(intent);
                        }
                    })
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    }).show();// 显示对话框
        }

         三、创建带单选项列表的对话框 

    //下面代码将打开一个如右上图所示的选项列表对话框:
    final String[] items = {"java", ".net", "php"};
    new AlertDialog.Builder(SenderNotificationActivity.this).setTitle("选择语言")
        .setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getApplicationContext(), items[item], 
            Toast.LENGTH_SHORT).show();
            }
        }).show();//显示对话框
    //下面代码将打开一个如右下图所示的带单选框的列表对话框:
    final String[] items = {"java", ".net", "php"};
    new AlertDialog.Builder(SenderNotificationActivity.this).setTitle("选择语言")
    .setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], 
            Toast.LENGTH_SHORT).show();
                dialog.cancel();
          }
    }).show();//显示对话框
    //setSingleChoiceItems()的第二个参数是设置默认选项,
    选项索引从0开始,-1代表不选择任何选项。

         四、创建带多选项列表的对话框

    final String[] items = {"java", ".net", "php"};
    new AlertDialog.Builder(SenderNotificationActivity.this).setCancelable(false)
    .setTitle("选择语言")
    .setMultiChoiceItems(items, new boolean[]{false,true,false}, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            if(isChecked){
            Toast.makeText(getApplicationContext(), items[which], 
                Toast.LENGTH_SHORT).show();
            }
            }
        })
    .setPositiveButton("确认",
        new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialoginterface, int i){
            dialoginterface.dismiss();
         }
    })
    .show();//显示对话框

         五、进度条

       使用代码ProgressDialog.show(ProgressDialogActivity.this, "请稍等", "数据正在加载中...", true);创建并显示一个进度对话框。

      调用setProgressStyle()方法设置进度对话框风格。有两种风格:

           ProgressDialog.STYLE_SPINNER 旋体进度条风格 (为默认风格)

           ProgressDialog.STYLE_HORIZONTAL 横向进度条风格

    <!--在布局xml文件中添加进度条代码:-->
    <ProgressBar 
        android:layout_width="fill_parent" 
        android:layout_height="20px"
        style="?android:attr/progressBarStyleHorizontal"
        android:id="@+id/downloadbar"/> 
    
    <!--在代码中操作进度条:
             ProgressBar.setMax(100);//设置最大刻度
             ProgressBar.setProgress(0);//设置进度条的当前刻度,如果进度条的最大刻度为100,当前刻度为50,进度条将进行到一半。
    -->
    public class ProgressDialogActivity extends Activity {
    private ProgressDialog progressDialog;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.menu); 
            //开始一条专门处理耗时工作的线程
            new Thread(new Runnable(){
                @Override
                public void run() {
                   try {
                       Thread.sleep(5*1000);//假设这项工作需要5秒才能完成
                          progressDialog.dismiss();//关闭进程对话框
                         //runOnUiThread(finishDialog);//要求运行在UI线程
               } catch (InterruptedException e) {}
                }
            }).start();        
            progressDialog = ProgressDialog.show(ProgressDialogActivity.this, "请稍等", "数据正在加载中...", true);
       }    
       private Runnable finishDialog = new Runnable() {
            @Override
            public void run() {           
                progressDialog.dismiss();
            }
       };
    }

         六、单选框(RadioButton)

    要完成单选框显示,我们需要使用到RadioGroup和RadioButton(单选框),RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框能被选中。(例子代码请见下方备注栏)
     RadioGroup.check(R.id.dotNet);将id名为dotNet的单选框设置成选中状态。
    (RadioButton) findViewById(radioGroup.getCheckedRadioButtonId());//获取被选中的单选框。
    RadioButton.getText();//获取单选框的值
    调用setOnCheckedChangeListener()方法,处理单选框被选择事件,把RadioGroup.OnCheckedChangeListener实例作为参数传入

      界面设计:

    界面设计:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <RadioGroup android:id="@+id/radioGroup"
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
    <RadioButton android:id="@+id/java"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="java" />
        <RadioButton android:id="@+id/dotNet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="dotNet" />
        <RadioButton android:id="@+id/php"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="PHP" />
    </RadioGroup>
    </LinearLayout>

      处理程序

    public void onCreate(Bundle savedInstanceState) {
            RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup); 
            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    RadioButton radioButton = (RadioButton) findViewById(checkedId);
                    Log.i(TAG, String.valueOf(radioButton.getText()));
                }
            });
    }

         七、多选框(CheckBox)

      每个多选框都是独立的,可以通过迭代所有多选框,然后根据其状态是否被选中再获取其值。

      CheckBox.setChecked(true);//设置成选中状态。
      CheckBox.getText();//获取多选框的值
      调用setOnCheckedChangeListener()方法,处理多选框被选择事件,把CompoundButton.OnCheckedChangeListener实例作为参数传入。

     界面设计:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="fill_parent">
      <CheckBox android:id="@+id/checkboxjava"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="java" />
      <CheckBox android:id="@+id/checkboxdotNet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="dotNet" />
      <CheckBox android:id="@+id/checkboxphp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="PHP" />
        
        <Button android:id="@+id/checkboxButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="获取值" />
    </LinearLayout>

    代码处理

    public class CheckBoxActivity extends Activity {
        private static final String TAG = "CheckBoxActivity";
        private List<CheckBox> checkboxs = new ArrayList<CheckBox>();
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            checkboxs.add((CheckBox) findViewById(R.id.checkboxdotNet));
            checkboxs.add((CheckBox) findViewById(R.id.checkboxjava));
            checkboxs.add((CheckBox) findViewById(R.id.checkboxphp));
            checkboxs.get(1).setChecked(true);// 设置成选中状态
            for (CheckBox box : checkboxs) {
                box.setOnCheckedChangeListener(listener);
            }
            Button button = (Button) findViewById(R.id.checkboxButton);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    List<String> values = new ArrayList<String>();
                    for (CheckBox box : checkboxs) {
                        if (box.isChecked()) {
                            values.add(box.getText().toString());
                        }
                    }
                    Toast.makeText(CheckBoxActivity.this, values.toString(), 1).show();
                }
            });
        }
    
        private CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                CheckBox checkBox = (CheckBox) buttonView;
                Log.i(TAG,"isChecked=" + isChecked + ",value=" + checkBox.getText());// 输出单选框的值
            }
        };
    }

         八、下拉列表框(Spinner)

      Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());//获取下拉列表框的值,
          //调用setOnItemSelectedListener()方法,处理下拉列表框被选择事件,把AdapterView.OnItemSelectedListener实例作为参数传入。

      1、Spinner的界面设计:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <Spinner android:id="@+id/spinner"
          android:layout_height="wrap_content"
          android:layout_width="fill_parent"/>
    </LinearLayout>

    代码处理:

    public class SpinnerActivity extends Activity {
        private static final String TAG = "SpinnerActivity";
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.spinner);
            // 第二个参数为下拉列表框每一项的界面样式,该界面样式由Android系统提供,当然您也可以自定义
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            adapter.add("java");
            adapter.add("dotNet");
            adapter.add("php");
            Spinner spinner = (Spinner) findViewById(R.id.spinner);
            spinner.setAdapter(adapter);
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view,
                        int position, long id) {
                    Spinner spinner = (Spinner) adapterView;
                    String itemContent = (String) adapterView.getItemAtPosition(position);
                    Log.i(TAG, itemContent+" : "+spinner);
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> view) {
                    Log.i(TAG, view.getClass().getName());
                }
            });
        }
    }

      很多时候显示在下拉列表框的值并不是希望得到的值,如果要做一个联系人下拉列表框,列表框列出的是联系人的姓名,因为姓名有可能相同,所以我们希望得到的值应该为该联系人的id,要实现这种需求我们需要自定义Adapter,当然自定义Adapter需要我们编写一小段代码,如果我们不想编写Adapter,又能实现我们的需求,那是最好不过的了。通过观察ArrayAdapter中getView(int position, View convertView, ViewGroup parent)的内部代码发现,如果为ArrayAdapter指定的实际泛型参数类型没有实现CharSequence(字符串)接口,将会调用该类型对象的toString()向下拉列表框输出显示值。利用这个特点我们可以重写javaBean的toString()向下拉列表框提供显示值。

       2、通过有没有实现CharSequence接口,来改变下拉列表框的显示值

    public class SpinnerActivity extends Activity {
        private static final String TAG = "SpinnerActivity";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.spinner); 
            ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            adapter.add(new Person(12, "李明"));
            adapter.add(new Person(100, "李明"));
            adapter.add(new Person(62, "张天"));
            Spinner spinner = (Spinner) findViewById(R.id.spinner);
            spinner.setAdapter(adapter);
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            Spinner spinner = (Spinner)adapterView;
            Person person = (Person)adapterView.getItemAtPosition(position);
        }
        @Override
        public void onNothingSelected(AdapterView<?> view) {
            Log.i(TAG,  view.getClass().getName());
        }
            });
        }
    }

    Person.java

    Person.java:
    public class Person {
        private Integer id;
        private String name;
        
        public Person(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return name;
        }
    }

      3、自定义下拉列表框样式:

        3.1下拉列表框每一项的界面样式:stylespinner.xml

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/contentTextView"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:background="#F4FDFF"
        />

        3.2代码处理

    public class SpinnerActivity extends Activity {
        private static final String TAG = "SpinnerActivity";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.spinner); 
             //第二个参数为layout文件在R文件的id,第三个参数为TextView在layout文件的id
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.stylespinner, R.id.contentTextView);
            adapter.add("java");
            adapter.add("dotNet");
            adapter.add("php");
            Spinner spinner = (Spinner) findViewById(R.id.spinner);
            spinner.setAdapter(adapter);
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
            Spinner spinner = (Spinner)adapterView;
            String itemContent = (String)adapterView.getItemAtPosition(position);
        }
        @Override
        public void onNothingSelected(AdapterView<?> view) {
            Log.i(TAG,  view.getClass().getName());
        }
            });
        }
    }

         九、拖动条(SeekBar)

       SeekBar.getProgress()获取拖动条当前值

      调用setOnSeekBarChangeListener()方法,处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <SeekBar
            android:id="@+id/seekBar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    
        <Button
            android:id="@+id/seekBarButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取值" />
    
    </LinearLayout>
    public class MainActivity extends Activity {
        private SeekBar seekBar;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.seekbar);
            seekBar = (SeekBar) findViewById(R.id.seekBar);
            seekBar.setMax(100);// 设置最大刻度
            seekBar.setProgress(30);// 设置当前刻度
            seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress,
                        boolean fromTouch) {
                    Log.v("onProgressChanged()", String.valueOf(progress) + ", "
                            + String.valueOf(fromTouch));
                }
    
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {// 开始拖动
                    Log.v("onStartTrackingTouch()",
                            String.valueOf(seekBar.getProgress()));
                }
    
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {// 结束拖动
                    Log.v("onStopTrackingTouch()",
                            String.valueOf(seekBar.getProgress()));
                }
            });
            
            Button button = (Button) this.findViewById(R.id.seekBarButton);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this,
                            String.valueOf(seekBar.getProgress()), 1).show();
                }
            });
        }
    }

         十、菜单(Menu)

       1、重写Activity的onCreateOptionsMenu(Menu menu)方法,该方法用于创建选项菜单,在用户按下手机的“Menu”按钮时就会显示创建好的菜单,在onCreateOptionsMenu(Menu menu)方法内部可以调用Menu.add()方法实现菜单的添加。

      2、重写Activity的onMenuItemSelected()方法,该方法用于处理菜单被选择事件。通过手机上提供的“MENU”按钮可以打开菜单,如果希望通过代码打开菜单,可以调用Activity的openOptionsMenu()方法。

    public class MenuActivity extends Activity {
    private static final String TAG = "MenuActivity";
    private static final int MENU_ADD = Menu.FIRST;
    private static final int MENU_UPDATE = Menu.FIRST + 1;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.menu); 
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "添加");  
        menu.add(Menu.NONE, MENU_UPDATE, Menu.NONE, "更新");
        return super.onCreateOptionsMenu(menu);
        }
        @Override
        public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch (item.getItemId()) {
          case MENU_ADD:
               Log.i(TAG, "add was selected");
               return true;
          case MENU_UPDATE:
               Log.i(TAG, "update was selected");
               return true;
          default:
                  return super.onMenuItemSelected(featureId, item);
          }
        }    
    }

         十一、自动完成文本框(AutoCompleteTextView)

       AutoCompleteTextView和EditText组件类似,都可以输入文本。但AutoCompleteTextView组件可以和一个字符串数组或List对

    绑定,当用户输入两个及以上字符时,系统将在AutoCompleteTextView组件下方列出字符串数组中所有以输入字符开头的字符串,这一点和www.google.com的搜索框非常相似,当输入某一个要查找的字符串时,google搜索框就会列出以这个字符串开头的最热门的搜索字符串列表。

    <AutoCompleteTextView
    
       android:layout_width="fill_parent“  android:layout_height="wrap_content“
    
      <!-- completionThreshold 指定至少输入几个字符后才会出现自动提示功能-->
       android:completionThreshold="1“ 
    
       android:id="@+id/name" />
    public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      String[] names = {"abcd", "wers", "123a", "123s" , "sfsf", "sss", "abc", "acc"};
      AutoCompleteTextView nameText = (AutoCompleteTextView)this.findViewById(R.id.name);
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, names);
      nameText.setAdapter(adapter);
    
    }

      除了AutoCompleteTextView控件外,我们还可以使用MultiAutoCompleteTextView控件来完成连续输入的功能。也就是说,当输入完一个字符串后,在该字符串后面输入一个逗号(,),在逗号前后可以有任意多个空格,然后再输入一个字符串,仍然会显示自动提示列表。

      使用MultiAutoCompleteTextView时,需要为它的setTokenizer方法指定MultiAutoCompleteTextView.CommaTokenizer类对象实例,该对象表示采用逗号作为输入多个字符串的分隔符。

    < MultiAutoCompleteTextView

       android:layout_width="fill_parent“  android:layout_height="wrap_content“

      <!– completionThreshold 指定至少输入几个字符后才会出现自动提示功能à

       android:completionThreshold="1“ 

       android:id="@+id/name" />

    public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

         String[] names = {"abcd", "wers", "123a", "123s" , "sfsf", "sss", "abc", "acc"};
         MultiAutoCompleteTextView nameText = (MultiAutoCompleteTextView)this.findViewById(R.id.name);

         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,    names);

         nameText.setAdapter(adapter);

         nameText.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());}

  • 相关阅读:
    DockerFile自定义简单的镜像
    error: rpmdb: BDB0113 Thread/process 11524/140156910634816 failed: BDB1507 Thread died in Berkeley DB library
    Docker--privileged的作用
    MySQL---‘PRIMARY KEY’的使用
    DockerFile----CMD和ENTRYPOINT区别案例
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    查询出数据库表中字段名
    查询出数据库表中字段名
    jquery复制当前tr行
    jquery复制当前tr行
  • 原文地址:https://www.cnblogs.com/lbangel/p/3469640.html
Copyright © 2011-2022 走看看