Android 开发过程中小知识点汇总

来源:互联网 发布:51单片机毕业设计题库 编辑:程序博客网 时间:2024/05/29 18:12

本文出自:http://blog.csdn.net/dt235201314/article/details/72630103 (持续更新)

一丶慨述

很容易发现开发中有时候会百度,谷歌,有时候相同的小知识点搜了几遍,本文用于记录开发中的小知识点

二丶正文

1.限制EditText显示输入字符串位数

edt_reportSalesAmount.addTextChangedListener(new TextWatcher() {    private CharSequence temp;    private int selectionStart;    private int selectionEnd;    @Override    public void onTextChanged(CharSequence s, int start, int before, int count) {      temp = s;    }    public void beforeTextChanged(CharSequence s, int start, int count,int after) {    }    public void afterTextChanged(Editable s) {        selectionStart = edt_reportSalesAmount.getSelectionStart();        selectionEnd = edt_reportSalesAmount.getSelectionEnd();        if (temp.length() > 10) {            Toast.makeText(getActivity(), getString(R.string.ediTextToast),                    Toast.LENGTH_SHORT).show();            s.delete(selectionStart - 1, selectionEnd);            int tempSelection = selectionEnd;            edt_reportSalesAmount.setText(s);            edt_reportSalesAmount.setSelection(tempSelection);        }    }});

2.viewPage + fragment 点击fragment1里按钮,延迟添砖到fragment

Activity做延迟跳转方法

public void toHistoryReportDataFragment(){    new Handler().postDelayed(new Runnable() {        @Override        public void run() {            mViewPager.setCurrentItem(1);        }    }, 1000);}

在fragment1的P层,检测到数据上报成功,在P层调用Activity的方法

final ReportNumberActivity mainActivity = (ReportNumberActivity) reportDataFragment.getActivity();mainActivity.toHistoryReportDataFragment();

3.@SuppressLint("NewApi")作用是屏蔽android lint错误
在Android代码中,我们有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告.
解决方法是在方法上加上@SuppressLint("NewApi")
作用仅仅是屏蔽android lint错误,所以在方法中还要判断版本做不同的操作.


4.

tools:showIn="@layout/home_kpi_item"

在xml里看到这句话,表示在那些xml里用了include,一起显示出来


5..xml(v21)


今天改了个bug,把属性写在了.xml(v21)里,导致有的手机闪退或者显示不出来(系统版本低于21的)

v21或 v23表示的意思就是适用于最低版本的意思


6.返回空list

需要返回空对象时,尽可能使用Collections.emptyList()


7.默认EditTextView不自动获取焦点的方法

方法一: 
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden 
例如:

<activity    android:windowSoftInputMode="adjustUnspecified|stateHidden"    android:name=".ui.sales.ReportNumberActivity" />

方法二: 
让EditText失去焦点,使用EditText的clearFocus方法 
例如:
EditText edit=(EditText)findViewById(R.id.edit); 
edit.clearFocus(); 


方法三: 
强制隐藏Android输入法窗口 
例如:


EditText edit=(EditText)findViewById(R.id.edit);  
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(edit.getWindowToken(),0); 

2.EditText始终不弹出软件键盘 
例:
EditText edit=(EditText)findViewById(R.id.edit); 
edit.setInputType(InputType.TYPE_NULL);

方法四:焦点拦截法(自己所得)
在layout的xml文件中设置EditText的上级控件android:focusable="true"

android:focusableInTouchMode="true";

同时edittext控件android:focusable="true"
即可将焦点拦截,让EditText不自动获取焦点。


8.static的内存泄露问题

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它所属类的任何对象创建之前访问,无需引用任何对象。

Activity内静态常量属性耗内存,方法会引起重开,关于常用到的sartActivity,解决方式加了flag或者设置langchMode不重开也行

Android内存优化之——static使用篇


9.final

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。


10.viewstub

在介绍ViewStub之前,可以先了解一下<include/>标签,这是一个把其它布局资源包含进某个特定的布局中,在很多平台的开发中,都有类似的概念,这样好处就不用细说了,主要是可以在不同的文件中编辑界面的布局控件。
  ViewStub,惰性装载控件。ViewStub是一个无形的、零大小的视图,可以在程序运行的过程中,通过懒加载的模式inflate进布局资源中。当一个ViewStub的inflate()方法被调用或者被设为显示时,这个ViewStub使用设定的View才会被加载,并替换当前ViewStub的位置。因此,ViewStub存在于视图层次,直到setVisibility(int)或inflate()方法被调用,否则是不加载控件的,所以消耗的资源小。通常也叫它为“懒惰的include”。

public class MainActivity extends Activity {17     private Button btn1, btn2,btn3;18     private ViewStub viewStub;19 20     @Override21     protected void onCreate(Bundle savedInstanceState) {22         super.onCreate(savedInstanceState);23         setContentView(R.layout.activity_main);24         //获取控件,绑定事件25         btn1 = (Button) findViewById(R.id.btn1);26         btn2 = (Button) findViewById(R.id.btn2);27         btn3 = (Button) findViewById(R.id.btn3);28         viewStub = (ViewStub) findViewById(R.id.stub);29         viewStub.setOnInflateListener(inflateListener);30         btn1.setOnClickListener(click);31         btn2.setOnClickListener(click);32         btn3.setOnClickListener(click);33     }34 35     private OnInflateListener inflateListener=new OnInflateListener() {36         37         @Override38         public void onInflate(ViewStub stub, View inflated) {39             // inflaye ViewStub的时候显示40             Toast.makeText(MainActivity.this, "ViewStub is loaded!", Toast.LENGTH_SHORT).show();41         }42     };43     44     private View.OnClickListener click = new OnClickListener() {45         @Override46         public void onClick(View v) {47             switch (v.getId()) {48             case R.id.btn1:49                 try {50                     //如果没有被inflate过,使用inflate膨胀51                     LinearLayout layout=(LinearLayout)viewStub.inflate();52                     RatingBar bar=(RatingBar)layout.findViewById(R.id.ratingBar1);53                     bar.setNumStars(4);54                 } catch (Exception e) {55                     //如果使用inflate膨胀报错,就说明已经被膨胀过了,使用setVisibility方法显示56                     viewStub.setVisibility(View.VISIBLE);57                 }                58                 break;59 60             case R.id.btn2:61                 //隐藏ViewStub62                 viewStub.setVisibility(View.GONE);63                 break;64             case R.id.btn3:65                 //操作被inflate的控件,需要得到当前布局的对象66                 //然后通过这个对象去找到被inflate的控件。67                 //因为否则在这个示例中,会找到include标签引入的控件68                 LinearLayout linearLayout=(LinearLayout)findViewById(R.id.inflatedStart);69                 RatingBar rBar=(RatingBar)linearLayout.findViewById(R.id.ratingBar1);70                 float numStart=rBar.getRating();71                 numStart++;72                 if(numStart>4)73                 {74                     numStart=0;75                 }76                 rBar.setRating(numStart);77                 break;78             }79 80         }81     };






原创粉丝点击