说 明:本博文仅作个人学习android开发过程中的笔记,会比较杂乱,对其他人参考价值不大,请绕行!
◆android去掉默认焦点:
带有EditView的activity第一次进入时,第一个EditText框会自动获得焦点,这个严重影响了用户体验,但是如何去掉呢?
查阅了很多资料后,发现以下方法最简单,在xml中EditText控件之前加入如下内容:
<LinearLayout
android:id="@+id/linearLayout_focus"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
这是一个虚假的LinearLayout,不会显示的,但是会抢走焦点
错误出现:连接真机调试的时候如果连接太久没响应就会出现timeout
根据网上众多资料:可分为这几个解决方法
方法由简单到麻烦:
1.在window-》prensent....-》android-》设置ddms的timeout时间。这种是就最有效、最简洁的。
2.delete android里面的 apk,保证速度。不过试过一次后,真机好像变“聪明了”,也出现timeout。
3.Cleaning the project (Project->Clean),不行就重启eclipse或者android,很郁闷的是,重启后运行第一次可以。第二次就开始变慢了,也就是出现timeout
4.网上一个我没试过的方法:
Don't use spaces in your directory names. If you have files that are in such a directory (e.g., stuff inside of
C:\ProgramFiles\
), copy them to another spot that does not have spaces.很明显是说目录里面不要有空格,排除
Integer i=0;
i是一个对象
int i=3;
i是一个基础变量
Integer i=0;
这种写法如果没记错,在JAVA1.5之前是会报错的,自动的加解包是1.5的新特性
必须写成
Integer i= new Integer(0);
i.intValue()才能提取i的值
使用场合,例如说
往ArrayList里面add,必须add的是Object
而int不是对象,就只能把Integer添加进去
◆关于SQLite3图形化工具推荐SQLite expert personal,这是一个免费的小巧的SQLite管理工具,相对于收费的版本,所提供的功能也足够使用。
附一个专业版的key。将下面的字符拷到license2.key文件里,并复制到安装目录下即可。
697qpe3Z4rMXsQOOJz2lBLwz+JTfnDOI9dMB2rXarJLZTJ/KGYcXsyBBFpIEMVkJLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIlQMiBTtblj1TaZxa3fT1G5zj3HUTmIBiIQXQcqrpxjAI99dRf4u4Tslg/ykekt5myxpsSX8vLj9mXthBrCP264uSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyIuSST4mzXPW1GXmspY3ksiLkkk+Js1z1tRl5rKWN5LIi5JJPibNc9bUZeayljeSyJU3xWfo8fahTOgwBqnl60h3aaz4ThHAvyElzFjB51T7mBMPcS0204A+1opquBdWjYRejd84oOtjiY4LPjODXJ+lErgTE457volCPz1DcZlItRMDh3Y/6Cwbq9GaS2V/6GJcatb/DY03sPw6LnQuyc6WjUQoo9bIUFVaWRKNnffCAAjQKbhdhYGAzkGgUHTH+idau/DGJoMU18Gk8+vIEY2q8Zs99flaC9fHXzxURe5iULnMtlzPIkN6n7yXBkvKR4oHtSPeLNsMURsd4hu28DqHjfmjo50/7s7Gp/IHB4edA1fd3yXeiy06DbNufKPSkRSOfmJdnqRCWHaRqFBWBJpNyfBKOT9c7o3/MSfQ/OW4r+yzImJ+5VZha5fpYHLKGwY8MSp0JNJgzxQ4u+auxd4m1jF6SbZ3fSvBhO9+3EHrwyuRGtehaBmKs2a8FAPH4o2O4IgTWSQvFlzR6IW092B3plvA0XBwK6KfYivq/73fH9Iy/JUE0C4gAZXJ5R9d03K+CZ8AkS4L2qBiLGent9Kfmwo89AczLctaWrydmC7lC5JJPibNc9bUZeayljeSyI=/GUHFOUVWggQhO+Ag6znGn2NQuAcBxU2wtSo78mdVCJn2hPA3uqVfA5BC5zi71nyxOm2ZlmbKh9WDcwvn8jv0uz2q8nucLlRP5WkAVO6oplTenMgURPTqa/E8kUj24On
◆Long类型转换为String类型:
Long num=studentDAO.getCount();
Long.toString(num); //long to String
◆新建工程,出现“R cannot be resolved to a variable”错误:
创建新工程的时候出现 cannot be resolved to a variable的问题时没法在第一时间得到最好的解决
其根本原因是r.java文件没有自动生成
关于一般的解决方案在网上很多人提出来了
比如CLEAN工程,CLEAN UP RESOURCE,Android Tools >> Fix Project Properties 等
但还是部分人看了网上的帖还不能解决,那么请注意两点:
1. 如果你在更新下载SDK,那么先关闭,重启ECLIPSE便可
2. 如果还不行,则更新完整ADT、SDK
◆ImageSwitcher的使用总结:
1、边google资料边练习,发现都是采用RelativeLayout布局方式,里面放ImageSwitcher和Gallery,为什么不用LinearLayout??
后来发现应该是xml中Gallery控件用到了android:layout_alignParentBottom="true"就是让 Gallery 位于屏幕底端,而 LinearLayout 不存在这个属性。
2、"requestFeature() must be called before adding content"错误解决:
Android 实现画面全屏(取消标题、取消状态栏):
//取消标题
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.setContentView(R.layout.logo); //Activity样式文件,一定要写在中间
//取消状态栏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
这与java的执行顺序有关!目前遇到的这个问题就是因为在系统运行开始的时候就已经调用父类的构造方法,接着调用setContentView方法展示视图界面。R.layout.main是R.java资源类中的一个属性。当你在调用这个方法之后在声明Widget就会报:“android.util.AndroidRuntimeException: requestFeature() must be called before adding content”
所以前面的那三句中加载Activity的样式的那句代码一定要写在中间。
◆关于在Android工程中添加图片等资源需注意:文件命名必须由【(小写的)a-z0-9_】组成,不能有大写字母且必须以小写字母开头,否则R.java会出错,切记!
我就犯了这个低级错误,以阿拉伯数字命名文件导致生成R.java报错!
◆关于程式调试时报“空指针异常”:
空指针异常比较常见的错误是写代码的人不太了解Android的生命周期,没搞清楚什么先被调用什么后被调用。有的时候你代码里写的感觉是给那个变量赋值了一个实例化对象,但那只是你自己的感觉而已,实际上系统用到这个变量的时机比你想的要更早,系统需要的时候发现这个变量的值是空的所以就报了空指针异常。
修空指针异常的方法就是在报错的位置前后设几个断点,然后一步步走看哪里、哪个变量在运行的时候是空。
◆关于fragement,可以参见:http://blog.csdn.net/cheer_zhang/article/details/26499867
在CSDN论坛看到有网友问:新版开发环境(ADT22.6)的layout下默认有两个布局文件activity_main.xml与fragment_main.xml ,代码中写的是setContentView(R.layout.activity_main);但我的那些控件内容都是写在fragment_main.xml里的啊,程序还能按预期运行。是怎么办到的?(参见http://bbs.csdn.net/topics/390740123)
以下是网友相关回答,收集如下:
Answer_1:新版安装SDK文件一开始有两个XML文件,activity_main.xml和fragment_main.xml,
不习惯的可以这样处理:
1.删除fragment_main.xml整个文件
2.对activity_main.xml,删除里面的内容。然后切换到Graphy Layout,放入一个LinearLayout就可以
3.对MainActivity.java,可以删除部分的内容,再把MainActivity extends ActionBarActivity 改为MainActivity extends Activity :
改后如下:
<span style="font-family:KaiTi_GB2312;font-size:14px;">package com.zmcorp.weightcalculator;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
}</span>
Answer_2:myTextview,myButton是在fragment_main.xml中的,在没引进fragment_main.xml之前,你是通过findViewById找不到的。。
<span style="font-family:KaiTi_GB2312;font-size:14px;">public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
TextView textview = (TextView)rootView.findViewById(R.id.view);
System.out.println(textview);
testview.setText("Hello Android!");
return rootView;
}
}</span>
Answer_3:在MainActivity的内部静态类PlaceholderFragment 类中的onCreateView中获取fragment_main.xml中控件
<span style="font-family:KaiTi_GB2312;font-size:14px;"> /**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
Button btnFirstButton = (Button) rootView.findViewById(R.id.btn_firstButton);
btnFirstButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "rootView.findViewById|fragment_main - -#", Toast.LENGTH_LONG).show();
}
});
return rootView;
}
}</span>