Android 零散学习笔记
来源:互联网 发布:java中socket编程实例 编辑:程序博客网 时间:2024/05/21 10:12
注:本学习笔记内容有来自网络社区,论坛,书籍,是我在学习的过程中总结的有用知识点,我不会用来获取任何利益,如果我侵犯了您的利益请联系我
Intent 用法
显式 Intent
Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);
隐式 Intent
1.打开本机浏览器跳转到目标网址
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setDate(Uri.parse("http://www.sina.com"));startActivity(intent);
2.调用本机拨号器拨打电话
Intent intent = new Intent(Intent.ACTION_DIAL);intent.setDate(Uri.parse("tel:12306"));startActivity(intent);
上面的setDate数据主要是在哪里设置和区分的呢,在一个activity的 intent-filter中的date选项中,其中android:scheme 指定的就是上面的tel和http
<activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <date android:scheme="http"> </intent-filter> </activity>
data标签中主要可以配置的内容
android:scheme
用于指定数据的协议部分,比如上面的http和tel
android:host
用于指定数据的主机名部分,比如上面的 www.sina.com
android:port
用于指定数据的端口部分,一般紧随在主机名之后
android:path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定
启动活动的令一种方法 startActivityForResult(); 可以用来接收打开的activity返回来的数据。
startActivityForResult(intent,1); //第一个参数intent 实例,第二个参数识别码
此识别码用来标识跳转到的activity,具体用法如下:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case 1: //这个1就是我们上面定义的识别码 if(resultCode == RESULT_OK){ //你要做的事情 } break; default: break; } }
那么在打开的activity怎么返回数据呢
Intent intnet = new Intent();setResult(RESULT_OK,intent);finish();
RESULT_OK为返回的结果码
在activity中监听返回键点击处理函数
@Override public void onBackPressed() { // TODO Auto-generated method stub super.onBackPressed(); Toast.makeText(getApplicationContext(), "点击了返回键", Toast.LENGTH_SHORT).show(); }
EditText一个知识点
<EditText android:id="@+id/et_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" />
上面一个EditText一个有id,一个没有id,当旋转屏幕的时候,有id的EditText会自动保存已经键入的内容,没有id的EditText则会清空
Button一个知识点
button.setEnabled(flase); 设置此属性后按钮虽然设置了监听但是也不能点击
隐藏软键盘
第一种方法
InputMethodManager inputMethodManager = (InputMethodManager)currFragAct.getSystemService(currFragAct.INPUT_METHOD_SERVICE); private boolean hideKeyboard(){ if(inputMethodManager.isActive(userText) || inputMethodManager.isActive(pswText)){ //因为是在fragment下,所以用了getView()获取view,也可以用findViewById()来获取父控件 loginButton.requestFocus();//强制获取焦点,不然getActivity().getCurrentFocus().getWindowToken()会报错 inputMethodManager.hideSoftInputFromWindow(currFragAct.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); inputMethodManager.restartInput(userText); inputMethodManager.restartInput(pswText); return true; } return false; }
第二种方法
/** * 当使用自定义的键盘时,需要隐藏系统弹出的软键盘,但是光标需要保留 */ private void editFocusControl() { //获取系统版本号 int sdkInt = Build.VERSION.SDK_INT; //如果是android 3.0以上版本,用下面的方法隐藏软键盘 if(sdkInt >= 11) { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); try { Class<EditText> cls = EditText.class; Method setSoftInputShownOnFocus; setSoftInputShownOnFocus = cls.getMethod("setSoftInputShownOnFocus", boolean.class); setSoftInputShownOnFocus.setAccessible(false); setSoftInputShownOnFocus.invoke(mDialNumEdit, false); } catch (Exception e) { e.printStackTrace(); } }else { //关闭软键盘,让手机始终不弹出软键盘 mDialNumEdit.setInputType(InputType.TYPE_NULL); } }
第三种方法
View view = currFragAct.getWindow().peekDecorView(); if (view != null) { InputMethodManager inputmanger = (InputMethodManager)currFragAct.getSystemService(Context.INPUT_METHOD_SERVICE); inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); }
ScrollView中元素不能充满ScrollView的问题
ScrollView里只能放一个元素.
当ScrollView里的元素想填满ScrollView时,使用”fill_parent”是不管用的,必需为ScrollView设置:android:fillViewport=”true”。
我猜 当ScrollView没有fillVeewport=“true”时, 里面的元素(比如LinearLayout)会按照wrap_content来计算(不论它是否设了”fill_parent”),
而如果LinearLayout的元素设置了fill_parent,那么也是不管用的,因为LinearLayout依赖里面的元素,而里面的元素又依赖LinearLayout,
这样自相矛盾.所以里面元素设置了fill_parent,也会当做wrap_content来计算.
禁止gridview上下滚动
设置gridview 的touch事件,是ACTION_MOVE 的话返回truemDragGrid.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return MotionEvent.ACTION_MOVE == event.getAction() ? true : false; } });
TextView两个有用的属性
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" android:singleLine="true" // 只显示一行 android:textSize="28sp" android:ellipsize="end"/> //当文本超出屏幕空间,文本缩进方式
防止页面下面的功能按钮被输入法顶起来
<activity android:name=".HomeFragActivity" android:windowSoftInputMode="adjustPan|stateHidden"/>
消除圆锯齿
paint.setAntiAlias(true); paint.setDither(true); //画圆 canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG| Paint.FILTER_BITMAP_FLAG)); canvas.drawCircle(this.l / 2, this.m / 2, this.j, this.b);
两个fragment之间传递参数
在当前fragment里面 sf为要跳转的fragment SearchProjectFragment sf = new SearchProjectFragment(); Bundle bundle = new Bundle(); bundle.putString("key", Projsid); sf.setArguments(bundle); 在sf中获取参数String string = getArguments().getString("key");
android.textiview.settextcolor失效的问题
使用textview.setColor(getResources().getColor(R.color.xxx))不要使用textview.setColor(R.color.xxx)
activity 中 onNewIntent(Intent intent)方法
大家遇到一个应用的Activity供多种方式调用启动的情况,多个调用希望只有一个Activity的实例存在,这就需要Activity的onNewIntent(Intent intent)方法了。只要在Activity中加入自己的onNewIntent(intent)的实现加上Manifest中对Activity设置lanuchMode=“singleTask”就可以。
onNewIntent()非常好用,Activity第一启动的时候执行onCreate()---->onStart()---->onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到onNewIntent(). 而后面如果再有想启动Activity的时候,那就是执行onNewIntent()---->onResart()------>onStart()----->onResume(). 如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()---->onStart()---->onResume()等。
不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法
当调用到onNewIntent(intent)的时候,需要在onNewIntent() 中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。
设置RadioGroup 中radioButton 间距
方法一:
RadioGroup inputMethodGroup; RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT,RadioGroup.LayoutParams.WRAP_CONTENT); params.setMargins(0, 0, 70, 0); RadioButton radioButton = new RadioButton(mContext); radioButton.setText(imeLabel); radioButton.setButtonDrawable(R.drawable.radiobutton_selector); radioButton.setPadding(60, 0, 0, 0); radioButton.setTextSize(24); inputMethodGroup.addView(radioButton,params);
方法二:
感觉有点投机取巧了,看到 radioButton.setText(imeLabel) 了吧,这个是设置radioButton名字,下一个view还是radioButton ,我们可以在 radioButton.setText(imeLabel+” “) 中多加入些空格,就自动隔开了下一个radioButon;神马参数设置都是浮云,哈哈哈哈。
VerifiError问题
在运行项目到一个网络请求的时候总是报这个错误,大致错误截图如下
看了一下上面的报错信息,截图中没有截出来,大致是找不到org下面的HttpClient,这个类,网上也查了下VerifiError都说是jar包问题,看了自己的build 库 确实是没有引,引入这两个包就好了
添加Fragment到返回栈,点击返回键可以返回上一个fragment
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.replace(R.id.searoot_frame, new FragmentSeaGateStoryBookView());
ft2.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft2.addToBackStack(null);
ft2.commit();
模拟back键代码,返回到上一个fragment
getSupportFragmentManager().popBackStack();//suport.v4包
或getFragmentManager().popBackStack();
App因内容过多导致的启动延迟,白屏
在主Activity的theme中设置一下内容,自己设置个颜色或者放一张图片都可以,就像QQ的那个启动图
<activity android:name="com.tcl.userguide.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/logo</item> </style>
得到Activities栈顶的Activity类名,包名,类全路径
具体 步骤如下:
1、 得到当前运行环境(context)的Activity管理器;
2. 通过Activity管理器得到当前的任务栈信息;
3. 从任务栈中获得栈顶的Activity的名称。
具体读者可以参看下面的代码和Android帮助文档。
代码举例 :
String getTopActivity(Activity context){ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE) ;List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1) ;if(runningTaskInfos != null)return (runningTaskInfos.get(0).topActivity).toString() ;elsereturn null ;}
最后不要忘记在AndroidManifest.xml中增加权限:<uses-permission android:name = “android.permission.GET_TASKS”/>ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); RunningTaskInfo info = manager.getRunningTasks(1).get(0); String shortClassName = info.topActivity.getShortClassName(); //类名 String className = info.topActivity.getClassName(); //完整类名 String packageName = info.topActivity.getPackageName(); //包名
- Android 零散学习笔记
- C#学习零散笔记
- 【C++学习】零散笔记
- PowerDesigner学习之零散笔记
- 零散小知识学习笔记
- Java多线程学习零散笔记
- android 零散笔记不定期更新
- Android 学习记录-零散知识点
- linux学习笔记1(零散)
- IBM AIX零散学习笔记(一)
- IBM AIX零散学习笔记(二)
- IBM AIX零散学习笔记(三)
- 学习笔记 (零散问题总结) [第七课]
- oracle 学习笔记,零散知识点收集
- C++ 学习笔记---零散的基础知识
- android整理的一些零散笔记
- android 零散笔记不定期更新 v17
- 零散笔记
- 学习 Mars 老师 Android 开发视频教程笔记之01_06 Android 常用控件
- Android中获取ROM和SD卡剩余可用空间大小
- GCD&LCM-求最大公约数&最小公倍数
- jquery-easyui-1.4.4 汉化版
- vfio内核实现分析-(6)将io暴露到userspace
- Android 零散学习笔记
- 二进制与格雷码之间的转换---矩阵表示
- 数据库原理SQL简述
- 字节序(byte order)和位序(bit order)
- TextInputLayout 的简单使用
- redis详解
- 设计模式学习——单例模式
- maven构建web项目
- Android 线程消息机制深入分析