Android开发常用组件学习(上)

    xiaoxiao2021-03-26  7

    1.简单UI组件

    Activity文件

    /** * 简单的component * @author Administrator * */ public class SimpleComponentActivity extends Activity { private TextView tv_simple_message; private EditText et_simple_number; private Button btn_simple_submit; private ImageView iv_simple_icon; private CheckBox cb_simple_basket; private CheckBox cb_simple_foot; private CheckBox cb_simple_pingpang; private RadioGroup rg_simple_sex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_simple_component); //1. TextView tv_simple_message = (TextView) findViewById(R.id.tv_simple_message); tv_simple_message.setText("简单UI组件"); //2. EditText et_simple_number = (EditText) findViewById(R.id.et_simple_number); //3. Button btn_simple_submit = (Button) findViewById(R.id.btn_simple_submit); btn_simple_submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //得到内容 String number = et_simple_number.getText().toString(); //提示 Toast.makeText(SimpleComponentActivity.this, number, 0).show(); } }); //4. ImageView iv_simple_icon = (ImageView) findViewById(R.id.iv_simple_icon); iv_simple_icon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //设置背景图片 iv_simple_icon.setBackgroundResource(android.R.drawable.alert_light_frame); //设置前景图片 iv_simple_icon.setImageResource(android.R.drawable.ic_media_pause); } }); //5. CheckBox cb_simple_basket = (CheckBox) findViewById(R.id.cb_simple_basket); cb_simple_foot = (CheckBox) findViewById(R.id.cb_simple_foot); cb_simple_pingpang = (CheckBox) findViewById(R.id.cb_simple_pingpang); //给cb_simple_foot设置选中状态改变的监听 cb_simple_foot.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { Toast.makeText(SimpleComponentActivity.this, "选中了足球", 0).show(); } else { Toast.makeText(SimpleComponentActivity.this, "未选中足球", 0).show(); } } }); //6. RadioGroup/RadioButton rg_simple_sex = (RadioGroup) findViewById(R.id.rg_simple_sex); rg_simple_sex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) {//checkedId 选中的radioButton的id //找到选中的radioButton RadioButton radioButton = (RadioButton) findViewById(checkedId); //得到文本 String sex = radioButton.getText().toString(); //提示 Toast.makeText(SimpleComponentActivity.this, sex, 0).show(); } }); } public void confirm(View v) { StringBuffer sb = new StringBuffer(); if(cb_simple_basket.isChecked()) { sb.append(cb_simple_basket.getText().toString()).append(" "); } if(cb_simple_foot.isChecked()) { sb.append(cb_simple_foot.getText().toString()).append(" "); } if(cb_simple_pingpang.isChecked()) { sb.append(cb_simple_pingpang.getText().toString()); } //提示 Toast.makeText(this, sb.toString(), 0).show(); } }

    xml文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_simple_message" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="这是TextView的内容" android:background="#999999" android:textColor="#ff0000" android:textSize="20sp"/> <EditText android:id="@+id/et_simple_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入手机号" android:inputType="phone"> </EditText> <Button android:id="@+id/btn_simple_submit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="提交" /> <ImageView android:id="@+id/iv_simple_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:drawable/alert_dark_frame" android:src="@android:drawable/ic_media_play"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="爱好: " /> <CheckBox android:id="@+id/cb_simple_basket" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="篮球" /> <CheckBox android:id="@+id/cb_simple_foot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="足球" /> <CheckBox android:id="@+id/cb_simple_pingpang" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="乒乓" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确定" android:onClick="confirm"/> </LinearLayout> <RadioGroup android:id="@+id/rg_simple_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/rb_simple_male" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="男" /> <RadioButton android:id="@+id/rb_simple_female" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" android:checked="true"/> <RadioButton android:id="@+id/rb_simple_nomale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="东方不败" /> </RadioGroup> </LinearLayout>

    2.菜单Menu

    Activity文件

    /** * 测试Menu * * @author 张晓飞 * */ /* OptionMenu 1. 如何触发Menu的显示? 点击menu键 2. 如何向Menu中添加MenuItem? 重写onCreateOptionMenu() menu.add()或者加载菜单文件 3. 选择某个MenuItem时如何响应? 重写onOptionsItemSelected(), 根据itemId做响应 ContextMenu 1. 如何触发Menu的显示? 长按某个视图 view.setOnCreateContextMenuListener(this) 2. 如何向Menu中添加MenuItem? 重写onCreateContextMenu() menu.add() 3. 选择某个MenuItem时如何响应? 重写onContextItemSelected(), 根据itemId做响应 */ public class MenuActivity extends Activity { private Button btn_test2_show_cm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); btn_test2_show_cm = (Button) findViewById(R.id.btn_test2_show_cm); //设置创建上下文菜单的监听 btn_test2_show_cm.setOnCreateContextMenuListener(this); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); //添加菜单项 menu.add(0, 1, 0, "添加"); menu.add(0, 4, 0, "删除"); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(this, "添加", 0).show(); break; case 4: Toast.makeText(this, "删除", 0).show(); break; default: break; } return super.onContextItemSelected(item); } // 用来显示optionmenu的方法: 向menu中添加Item @Override public boolean onCreateOptionsMenu(Menu menu) { // 纯编码方式 menu.add(0, 2, 0, "添加"); menu.add(0, 3, 0, "删除"); return super.onCreateOptionsMenu(menu); } /*@Override public boolean onCreateOptionsMenu(Menu menu) { // 菜单文件方式 //1. 得到菜单加载器对象 MenuInflater menuInflater = getMenuInflater(); //2. 加载菜单文件 menuInflater.inflate(R.menu.option_menu, menu); return super.onCreateOptionsMenu(menu); }*/ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { //case R.id.add: case 2: Toast.makeText(this, "添加", 0).show(); break; //case R.id.delete: case 3: Toast.makeText(this, "删除", 0).show(); break; default: break; } return super.onOptionsItemSelected(item); } }

    xml文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btn_test2_show_cm" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="显示ContextMenu" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="1. 点击menu显示选项菜单\n2. 长按按钮显示上下文菜单" android:textSize="25dp" /> </LinearLayout>

    3.进度条

    Activity文件

    /** * 测试进度条 * @author 张晓飞 * */ public class ProgressActivity extends Activity { private LinearLayout ll_progress_loading; private ProgressBar pb_progress_loading; private SeekBar sb_progress_loading; private OnSeekBarChangeListener onSeekBarChangeListener = new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) {//离开滑杆 Log.e("TAG", "离开滑杆"); //1. 得到seekBar的进度 int progress = sb_progress_loading.getProgress(); //2. 设置为ProgressBar的进度 pb_progress_loading.setProgress(progress); //3. 判断是否达到最大值 if(progress==sb_progress_loading.getMax()) { //如果达到了, 设置ll_progress_loading不可见 //ll_progress_loading.setVisibility(View.INVISIBLE); //不可见, 但占用空间 ll_progress_loading.setVisibility(View.GONE);不可见, 且不占用空间 } else { //如果没有达到 设置ll_progress_loading显示 ll_progress_loading.setVisibility(View.VISIBLE); } } @Override public void onStartTrackingTouch(SeekBar seekBar) {//按下滑杆 Log.e("TAG", "按下滑杆"); } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {//滑杆移动 Log.e("TAG", "滑杆移动"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_progress); ll_progress_loading = (LinearLayout) findViewById(R.id.ll_progress_loading); pb_progress_loading = (ProgressBar) findViewById(R.id.pb_progress_loading); sb_progress_loading = (SeekBar) findViewById(R.id.sb_progress_loading); //给seekbar设置监听 sb_progress_loading.setOnSeekBarChangeListener(onSeekBarChangeListener ); } }

    xml文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/ll_progress_loading" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载中..." /> </LinearLayout> <ProgressBar android:id="@+id/pb_progress_loading" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:progress="30"/> <SeekBar android:id="@+id/sb_progress_loading" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="1. 滑动下面的滑杆后, 上面的进度条会同步\n2. 滑动到最大值时, 最上面的进度条消失" /> </LinearLayout>

    4.对话框

    Activity文件

    public class DialogActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dialog); } /** * 显示一般AlertDialog * @param v */ public void showAD(View v) { //new AlertDialog.Builder(this).create().show(); new AlertDialog.Builder(this) .setTitle("删除数据")//设置标题 .setMessage("你确定删除数据吗") .setPositiveButton("删除", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this, "删除数据", 0).show(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this, "取消删除数据", 0).show(); } }) .show(); //方法链调用 } /** * 显示单选列表AlertDialog * @param v */ public void showLD(View v) { final String[] items = {"红", "蓝", "绿", "灰"}; //final的变量在方法执行完后还存在 new AlertDialog.Builder(this) .setTitle("指定背景颜色") .setSingleChoiceItems(items, 2, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {//which就是选中的position //提示颜色 Toast.makeText(DialogActivity.this, items[which], 0).show(); //移除dilaog dialog.dismiss(); } }) .show(); } /** * 显示自定义AlertDialog * @param v */ public void showCD(View v) { //动态加载布局文件, 得到对应的View对象 View view = View.inflate(this, R.layout.dialog_view, null); //问题1: view的真实类型?是布局文件根标签的类型, 包含了子View对象 //问题2: 如何得到一个独立View的子View? view.findViewById(id) //findViewById(id)是在setContentView()中的View中找 final EditText nameET = (EditText) view.findViewById(R.id.et_dialog_name); final EditText pwdET = (EditText) view.findViewById(R.id.et_dialog_pwd); new AlertDialog.Builder(this) .setView(view) .setNegativeButton("取消", null) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //读取用户名和密码 String username = nameET.getText().toString(); String pwd = pwdET.getText().toString(); //提示 Toast.makeText(DialogActivity.this, username+" : "+pwd, 0).show(); } }) .show(); } /** * 显示圆形进度ProgressDialog * @param v * @throws InterruptedException */ public void showPD(View v){//回调方法: 主线程执行 final ProgressDialog dialog = ProgressDialog.show(this, "数据加载", "数据加载中..."); //模拟做一个长时间的工作 //长时间的工作不能在主线程做, 得启动分线程完成 new Thread(){ public void run() {//分线程 for(int i=0;i<20;i++) { //休息一会 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } //移除dialog dialog.dismiss();//方法在分线程执行, 但内部使用Handler实现主线程移除dialog //不能在分线程直接更新UI //显示toast //Toast.makeText(DialogActivity.this, "加载完成了!!!", 0).show(); runOnUiThread(new Runnable() { @Override public void run() {//在主线程执行 Toast.makeText(DialogActivity.this, "加载完成了!!!", 0).show(); } }); //runOnUiThread()在分线程执行 } }.start(); } /** * 显示水平进度ProgressDialog * @param v */ public void showPD2(View v) { //1. 创建dialog对象 final ProgressDialog pd = new ProgressDialog(this); //2. 设置样式 pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //3. 显示 pd.show(); //4. 启动分线程, 加载数据, 并显示进度, 当加载完成移除dilaog new Thread(new Runnable() { @Override public void run() { int count = 20; //设置最大进度 pd.setMax(count); for(int i=0;i<count;i++) { //休息一会 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } pd.setProgress(pd.getProgress()+1); } //移除dialog pd.dismiss(); } }).start(); } public void showDateAD(View v) { //创建日历对象 Calendar calendar = Calendar.getInstance(); //得到当前的年月日 int year = calendar.get(Calendar.YEAR);//得到年份 int monthOfYear = calendar.get(Calendar.MONTH);//月 int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);//得到日 Log.e("TAG", year+"-"+monthOfYear+"-"+dayOfMonth); new DatePickerDialog(this, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Log.e("TAG", year+"--"+(monthOfYear+1)+"--"+dayOfMonth); } }, year, monthOfYear, dayOfMonth).show(); } public void showTimeAD(View v) { Calendar c = Calendar.getInstance(); int hourOfDay = c.get(Calendar.HOUR_OF_DAY); //得到小时 int minute = c.get(Calendar.MINUTE); //得到分钟 Log.e("TAG", hourOfDay+":"+minute); new TimePickerDialog(this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Log.e("TAG", hourOfDay+"::"+minute); } }, hourOfDay, minute, true).show(); } }

    xml文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- AlertDialog --> <Button android:id="@+id/btn_test4_ad" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="showAD" android:text="显示一般AlertDialog" /> <Button android:id="@+id/btn_test4_ld" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="showLD" android:text="显示单选列表AlertDialog" /> <Button android:id="@+id/btn_test4_custom" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="showCD" android:text="显示自定义AlertDialog" /> <!-- ProgressDialog --> <Button android:id="@+id/btn_test4_pd" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="showPD" android:text="显示圆形进度ProgressDialog" android:layout_marginTop="20dp"/> <Button android:id="@+id/btn_test4_pd2" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="showPD2" android:text="显示水平进度ProgressDialog" /> <!-- DatePickerDialog与TimePickerDialog --> <Button android:id="@+id/btn_test4_dd" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="showDateAD" android:text="显示DatePickerDialog" android:layout_marginTop="20dp"/> <Button android:id="@+id/btn_test4_td" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="showTimeAD" android:text="显示TimePickerDialog" /> </LinearLayout> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/title" android:scaleType="fitXY"/> <EditText android:id="@+id/et_dialog_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名"> </EditText> <EditText android:id="@+id/et_dialog_pwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码" android:inputType="textPassword"/> </LinearLayout>
    转载请注明原文地址: https://ju.6miu.com/read-600094.html

    最新回复(0)