初识Android项目知识点积累

1、在alertDialog中显示自定义布局,并使EditText显示输入法:

.getWindow().setContentView(layout)来加载layout。这是默认情况下隐藏软键盘的方法,要重新显示软键盘,要执行下面这段代码:
alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

先后顺序:

1. AlertDialog dlg=new AlertDialog.Builder(mContex).create();
2. dlg.setView(layout) //setView()要在show()前面
3. dlg.show()

4. Window window = dlg.getWindow()
   window.setContentView(R.id.layout)

5. window.finfViewById(R.id.***layout);//这里设置要显示的layout布局文件

在调用show方法前先调用dlg.setView(layout),
show后再调用window.setContentView(layout),
两个Layout布局应该是相同的。
至于原因,暂时不明,但是确实解决了问题,在EditText上点击,可以调出软键盘,输入法了。

例子:

    AlertDialog dlg=new AlertDialog.Builder(mContex).create();
    dlg.show();

    //加上这一句就能显示小键盘了。。。重要重要
    window.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

    window.setContentView(R.layout.alert_singleline_input);//注意这里用的是R里面的id
    TextView titleTextView = (TextView) window.findViewById(R.id.alert_input_title);
    … …

2、常用dialog

  • Dialog,对话框,一个对话框就是一个小窗口,并不会填满整个屏幕,通常是以模态显示,要求用户必须采取行动才能继续进行剩下的操作。

  • Android提供了丰富的对话框支持,它提供了如下4中常用的对话框:

    • AlertDialog:警告对话框,使用最广泛功能最丰富的一个对话框。
    • ProgressDialog:进度条对话框,只是对进度条进行了简单的封装。
    • DatePickerDialog:日期对话框。
    • TimePickerDialog:时间对话框。

3、打开一个新的Activity

//=========在Activity中打开另一个Activity
1.  startActivity(new Intent(mContext, MainActivity.class));

//=========在Fregment中打开另一个Activity
2.  Intent intent = new Intent(getActivity(),CardActivity.class);
    getActivity().startActivity(intent);
//========
3.  startActivityForResult()
    /*
    NOTE:
    1. 当程序执行到这段代码的时候,假若从T1Activity跳转到下一个Text2Activity,而当这个Text2Activity调用了finish()方法以后,程序会自动跳转回T1Activity,并根据T2Activity的setResult()方法调用前一个T1Activity中的onActivityResult( )方法。
    2. 在Fragment中应该调用startActivityForResult()的方法
       而不是getActivity().startActivityForResult()
    */

相关函数:

startActivityForResult(Intent intent, Int requestCode)
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)

例子:

http://www.cnblogs.com/lijunamneg/archive/2013/02/05/2892616.html

使用Intent传递参数:

//添加参数          (默认使用的也是Bundle,和第二种方式一样)
intent.putExtra("key","String");
intent.putExtra("String",xxxxx);    //其中xxxxx需要实现Serializable接口;
//获取参数
intent.getExtras().getString("key");    //获取String类型的值
intent.getExtras().getXXXXX("key"); //获取XXXXX类型的值
intent.getExtras().get("key");  //获取Object类型的值,此时需要进行强制转换

//添加Bundle
Bundle bundle=new Bundle();
bundle.putXXX("String",XXXX);
intent.putExtras(bundle);
//获取Bundle
Bundle bundle = this.getIntent().getExtras();
XXX = bundle.getXXX("String");

6、SharedPreference:

将数据保存至SharedPreferences:

SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);
Editor editor=preferences.edit();
String name="xixi";
String age="22";
editor.putString("name", name);
editor.putString("age", age);
editor.commit();

从SharedPreferences获取数据:

SharedPreferences preferences=getSharedPreferences("user", Context.MODE_PRIVATE);
String name=preferences.getString("name", "defaultname");
String age=preferences.getString("age", "0");

haredPreferences的四种操作模式:
- Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
- Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
- Context.MODE_WORLD_READABLEContext.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
- MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
- MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.


7、自定义控件提示Use View.isInEditMode() in your custom views to skip code when shown in Eclipse。

我们直接找到“自定义控件”的代码,然后 解决方法是定位触发错误代码段,并将造成此错误的代码行用

if(!isInEditMode()){
    //造成错误的代码段
}

包起来,这样在Eclipse中显示时将跳过此代码段而不再出现错误。这样就可以正常预览layout了。

http://blog.csdn.net/changemyself/article/details/43794725


8、Json的null

  1. 在Map中取不存在的键值对时不会报异常,只会返回null;

  2. 利用jSONObject.get(Object key)方法及get(String key)取不存在的键值对时不会报异常,会返回null;

  3. 但是利用jSONObject.getxxx(String key)方法取时会报空指针异常

    • 第一种情况是: json包是json-lib包是net.sf.json
      怎样判断JSONObject返回的是字符串null还是null值.
      研究源码发现.JSONObject里有一段代码是当遇到json串中是null的时候.返回JSONNUll.

    • 第二种情况是: org.json的包。这时候发现.返回的null是JSONObject.NUll
      两种包不一样的返回NUll值


9、在Adapter里面调用Activity的方法/变量

把activity或者fragment的实例传入adapter中,然后就可以调用activity或者fragment里面的方法。
场景:为listview中的item添加适配器,达到自定义item的效果。当点击item中的时候调用Activity的方法,比如打开另一个Activity。
解决:在Adapter中维持一个对该Activity或Fragment的引用。当实例化这个Adapter时,对其中的这个引用赋值。这样就可以根据需要调动Activity或者Fragment中的方法。
例如:

  • Activity:
 public class MyActivity extends Activity
{
public void test(){};
public void test(int position){}
}
  • BaseAdater:
public class MyBaseAdapter extends BaseAdapter{
MyActivity context;
     public  MyBaseAdapter(MyActivity context){
this.context = context;
}

……
//调用MyActivity的方法。
context.test();
context.text(1);
……

}

http://www.android100.org/html/201306/30/3376.html


10、popupwindow

//加上上面两句,可以在触发Back键或者点击在popupWindow以外的区域时让其dismiss

pop.setOutsideTouchable(true);//======第一句
pop.setBackgroundDrawable(new BitmapDrawable());//=======第二句

11、long和int

此部分有待商议:int和long在不同位的操作系统和编译器分别代表多长的字节?

由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况:
主要以下几种转换方法,供参考:

1. 强制类型转换

long ll = 300000;  
int ii = (int)ll;  

2. 调用intValue()方法

long ll = 300000;  
int ii= new Long(ll).intValue();  

3. 先把long转换成字符串String,然后在转行成Integer

long ll = 300000;  
int ii = Integer.parseInt(String.valueOf(ll));

这三种方法都比较简单明了。


12、javadoc生成

使用/***/注释,这种就会生成javadoc注释,可以在类名,方法名、字段名上方输入/**回车即可自动生成doc模版。


13、BaseAdapter的getView()调用时机

BaseAdapter的getView()方法的调用时机大致如下:

  • 初始显示时

  • listview滚动时

  • notifyDataSetChanged处理时

每一个item都要调用一次getView();


14、textview中文字过长时,显示省略号

设置Textview的属性

android:ellipsize="middle"  //此处还有其他值,分别在头部、中间、尾部显示
android:maxEms="15"         //元素的最大树木
android:singleLine="true"

15、Parcelable、Serializable使用与区别

未完待续……


16、RelativeLayout布局的wrap_content 和 match_parent

RelativeLayout布局中,wrap_content 和 match_parent 有时是一样的。
比如,设置布局的最外层layout的 layout_height 或 layout_width ,设置为wrap_content 或 match_parent 都会填满整个布局,并不是真的“wrap_content”。
但是将RelativeLayout修改为LinearLayout,情况就会相反。


17、设置Dialog可以通过ApplicationContext开启

将Dialog设置为Alert类型即可。如果需要在App外弹出,则需要权限:

//alertDialog为Dialog的一个实例
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
//或者在自定义的Dialog中,直接 getWindow().setType(…)……


18、设置Activity为全透明

在Manifest文件中注册的需要设置透明的Activity中,添加主题:
android:theme=”@android:style/Theme.Translucent.NoTitleBar.Fullscreen”

android:theme=”@android:style/Theme.Translucent.NoTitleBar”

同时保证该Avitivity是继承自Activity(或者自己创建的BaseActivity,没有过多限制Activity的主题),而不是其他的比如AppCompatActivity等。


**19、View inflate方法和LayoutInflater inflate方法的区别

参考:

http://www.cnblogs.com/baipengzhan/p/LayoutInflater_inflate_View_inflate.html

LayoutInflater类的inflate方法适用于所有需要进行布局填充的场景,是Android中专门进行布局填充的方法,Android中其他需要使用布局填充的地方,都会调用本方法,而不是View类中的inflate方法。该方法不是静态方法,需要先创建LayoutInflater类的对象才能调用。

View类中的inflate方法内部包裹了LayoutInflater类的inflate方法,这个方法是一个静态方法,不需要创建View类的对象,直接使用View类名调用,相比上一种方法是一种简便方法。但很明显,这个方法不如上一个方法功能强大。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值