Android_实验小心得_持续补充中......
1、LineLayout布局控件宽度百分比显示
其中,宽度百分比 = 控件权重 / 所在parent中所有控件权重和
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" <Button android:layout_width="0dp" //宽度为0dp android:layout_height="fill_parent" android:layout_weight="1" //设置权重 android:text="1"/> </LinearLayout>
2、计算器回退键的实现
textView.setText(str.substring(0, str.length() - 1)); //在显示窗口设置为str字符串减一后子字符串
3、获取输入框字符串,根据内容实现加减乘除
private void getresult() { String exp=et_input.getText().toString(); //获取输入框字符串 if(exp==null||exp.equals("")) { return; } if(!exp.contains(" ")) //如果字符串不包换空格 { return; } double result=0; String s1=exp.substring(0,exp.indexOf(" ")); //String.indexOf(" ")获取String中第一个" "的位置,substring获取从0到indexOf位置的子字符串 String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2); String s2=exp.substring(exp.indexOf(" ")+3); //获取从第一个空格加三个字符位开始到exp最后一个字符位的子字符串 if(!s1.equals("")&&!s2.equals("")) { double d1= Double.parseDouble(s1); //将字符串转化为Double型 double d2 = Double.parseDouble(s2); //强制类型转换 if (op.equals("+")) { result = d1 + d2; } else if (op.equals("-")) { result = d1-d2; } else if (op.equals("×")) { result=d1*d2; } else if (op.equals("÷")) { if(d1==0) {result=0;}else result=d1/d2; } if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("÷")){ int r = (int)result; et_input.setText(r + ""); //数字加空字符串组成新的字符串 } else {et_input.setText(result + "");} }else if(!s1.equals("")&&s2.equals("")) { et_input.setText(exp); }else if(s1.equals("")&&!s2.equals("")) { double d2= Double.parseDouble(s2); if (op.equals("+")) { result = 0 + d2; } else if (op.equals("-")) { result = 0 - d2; } else if (op.equals("×")) { result=0*d2; } else if (op.equals("÷")) { result=0; } et_input.setText(result + ""); } else { et_input.setText(""); } }
4、EditText控件的常用属性
1、android:layout_gravity——设置控件显示的位置
默认top,还有bottom,center_vertical............
2、android:hin——设置提示文本
直接输入提示文字
3、android:textColorHint——设置提示文本的颜色
可以使用十六进制(可以直接在左边选择颜色),也可以在资源文件里设置好颜色值后通过id的形式引用
4、android:singleLine——设置单行输入
一旦设置为true,则文字不会自动换行。
5、android:capitalize ——设置英文字母大写类型。
设置如下值:sentences仅第一个字母大写;words每一个单词首字母大小,用空格区分单词;characters每一个英文字母都大写。
6、android:digits ——设置允许输入哪些字符。
如“1234567890.+-*/%\n()”
7、android:inputType——设置文本的类型
密码类型,数字类型(只能输入数字,并且会弹出数字的键盘),Email............
8、android:password ——密码,以小点”.”显示文本
9、android:phoneNumber ——设置为电话号码的输入方式。
10、android:editable ——设置是否可编辑。
如果为false的话仍然可以获取光标,但是无法输入。
11、android:autoLink=”all” ——设置文本超链接样式当点击网址时,跳向该网址
12、android:visibility——设置文本是否显示
gone(不显示也不占用位置),invisible(不显示但占用位置),visible(显示并占用位置)
13、获取EditText控件输入内容并转化为字符类型:EditText.getText().toString()
5、Intent
- Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。Intent这个英语单词的本意是“目的、意向、意图”。
- Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应
- activity、service和broadcast receiver之间是通过Intent进行通信的,对于向这三种组件发送intent有不同的机制:
- 使用Context.startActivity() 或 Activity.startActivityForResult(),传入一个intent来启动一个activity。使用 Activity.setResult(),传入一个intent来从activity中返回结果。
- 将intent对象传给Context.startService()来启动一个service或者传消息给一个运行的service。将intent对象传给 Context.bindService()来绑定一个service。
- 将intent对象传给 Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()等广播方法,则它们被传给broadcast
Intent的相关属性:
-
- Intent由以下各个组成部分:
- component(组件):目的组件
- action(动作):用来表现意图的行动
- category(类别):用来表现动作的类别
- data(数据):表示与动作要操纵的数据
- type(数据类型):对于data范例的描写
- xtras(扩展信息):扩展信息
- Flags(标志位):期望这个意图的运行模式
Intet的公共的构造函数
(1)Intent():创建一个空的Intent
(3)Intent(String action):利用给定的操作创建一个Intent。
(4)Intent(String action, Uri uri):利用给定的操作为给定的Uri创建Intent
(5)Intent(Context packageContext, Class<?> cls):为特定的组件创建Intent。
(6)Intent(String action, Uri uri, Context packageContext, Class<?> cls):利用给定的操作和数据为给定的组件创建Intent
component(组件):目的组件
Component属性明确指定Intent的目标组件的类名称。(属于直接Intent)
如果 component这个属性有指定的话,将直接使用它指定的组件。指定了这个属性以后,Intent的其它所有属性都是可选的。
例如,启动第二个Activity时,我们可以这样来写:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //创建一个意图对象 Intent intent = new Intent(); //创建组件,通过组件来响应 ComponentName component = new ComponentName(MainActivity.this, SecondActivity.class); intent.setComponent(component); startActivity(intent); } });
startActivityForResult、onActivityResult、setResult
startActivityForResult(Intent intent, int requestCode)
onActivityResult(int requestCode, int resultCode, Intent data)
setResult(int resultCode, Intent data)
在启动另外一个Activity的时候,使用startActivityForResult 的带参数跳转。
startActivityForResult的主要作用就是它可以回传数据,假设我们有两个页面,首先进入第一个页面,里面有一个按钮,用于进入下一个页面,当进入下一个页面
时,进行设置操作,并在其finish()动作或者back动作后,将设置的值回传给第一个页面,从而第一个页面来显示所得到的值。这个有一点像回调方法,就是在第
二个页面finish()动作或者back动作后,会回调第一个页面的onActivityResult()方法,所以我们可以重写一下这个方法。
如下,mainActivity启动子Activity代码:
private static final int SUBACTIVITY1 = 1; btn1.setOnClickListener(new OnClickListener(){ public void onClick(View view){ Intent intent = new Intent(MainActivity.this, SubActivity1.class); startActivityForResult(intent, SUBACTIVITY1); } }); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case SUBACTIVITY1: if (resultCode == RESULT_OK){ Uri uriData = data.getData(); //解析Uri,获取其中传递的数据 textView.setText(uriData.toString()); //利用Uri再将数据转换为字符串类型 } break; case SUBACTIVITY2: break; } }
SubActivity1代码:
final EditText editText = (EditText)findViewById(R.id.edit); Button btnOK = (Button)findViewById(R.id.btn_ok); Button btnCancel = (Button)findViewById(R.id.btn_cancel); btnOK.setOnClickListener(new OnClickListener(){ public void onClick(View view){ String uriString = editText.getText().toString(); //获取编辑框内容 Uri data = Uri.parse(uriString); //Data接收的Uri对象格式,所以要对字符串进行格式转化
Intent result = new Intent(null, data); setResult(RESULT_OK, result); finish(); //表示调用子Activity完成,返回父级Activity } }); btnCancel.setOnClickListener(new OnClickListener(){ public void onClick(View view){ setResult(RESULT_CANCELED, null); finish(); } });
6、Android线程之Handler消息处理原理及应用