- 持续更新中
- 布局适配,button在低分辨手机上显示在最下面,高分辨手机上显示在最上面,解决方法,把他放在relative中,给设置layout_weight值,让他居中显示,button也居中显示,这样就行了
- imageloader修改图片是不能及时显示问题,再设置图片之前要清理一下内存缓存就可以了了,然后再显示的时候可以设置延时,之前是1秒,现在改一下就好了,ok
- gson解析json,如果解析成list时不成功,
- 解决方法:Type type = new TypeToken<List<CallItem>>()
{}.getType(); mData = newGson().fromJson(datas,
type);中间用来type来处理
- 安卓Style中带有layout的属性设置不成功:
- 解决方法:layout是跟上下文有关的,Style中设置无效果
- jar包导入无效, 解决办法:jar包应该放在/项目名/app,这个目录下面,有时候会放错就不能读取出来了,同时jni的so文件必须放到\app\src\main\jniLibs这个文件夹下面,否则不能读取
- 环信集成中登录注册处使用Toast报错,
解决:用Dialog代替
- studio中引入module时报错 出现该问题unspecified
on project app resolves to an APK archive which is not supported as a compilation dependency,
- 解决方案:此时ModuleB的build.gradle,apply plugin: 'com.android.application' 改成apply plugin: 'com.android.library'
,Gradle将编译称为一个Library,也就是库,运行之后,如果出现这个问题:Error:Library projects cannot
set applicationId. applicationId is set to 'package_name' in default config.,那是因为一个库不允许设置applicationId,需要将builde.gradle — android — defaultConfig中的applicationId删除;
- setting.gradle中的配置include 后面是项目名,有多少个项目就会出现几个项目名,要删除项目直接在这里删除项目名字即可
- studio界面上不能显示中文:
File
> Settings > Appearance & Behavior > Appearance,将default fonts(或者是name的值,其实是同一个东西)改为Microsoft YaHei(改成其它SimHei,SimSun也行,但个人觉得雅黑好看些)。
- studio内文件不能显示中文:
File
> Settings > Editor > File Encodings 里Project Encoding改为UTF-8,为了统一规范,我也将其它Encoding项也设置为UTF-8了。
- 关于资源文件放在那里
- values文件夹下面的colors中配置的颜色值可以用作drawable
- color文件夹下面的xml可以用作drawable,等同于drawable文件夹下的文件,所以selector文件放在那里都可以
- 其实两者是相同的,只是在color文件夹下的color是可以select的
- 测量控件高度
- int w = View.MeasureSpec.makeMeasureSpec(0,
-
View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
llsearchbar.measure(w, h);
mHeightSearchBar = llsearchbar.getMeasuredHeight();
private int measureHeight(View view) {
int w = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
view.measure(w, h);
return view.getMeasuredHeight();
}
- 改变控件高度
- GridView myGrid= (GridView) findViewById(R.id.gridview);
- LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) mGrid.getLayoutParams(); // 取控件mGrid当前的布局参数
- linearParams.height = 50;// 当控件的高强制设成50象素
- myGrid.setLayoutParams(linearParams); // 使设置好的布局参数应用到控件myGrid
viewpager的adapter写法:
package com.shixi.a;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* Created by z on 2016/6/2.
*/
public class basePagerAdapter extends PagerAdapter {
private List<View> mViews;
public basePagerAdapter(List<View> datas) {
mViews = new ArrayList<>();
mViews.addAll(datas);
}
@Override
public int getCount() {
return mViews.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mViews.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mViews.get(position));
return mViews.get(position);
}
}
- fragment中获取Activity中的对象
HomeActivity activity = (HomeActivity) getActivity();
FragmentTabHost fragmentTabHost = activity.fragmentTabHost;
- shape:
- 放在drawable目录下才可以
- 画ring要指定内圆半径
- 画oval要指定size
- fragmentDialog显示紧贴屏幕边缘
- 必须给其所在的window设置一个背景色才可以,这是个bug
- 界面上其中一个控件设置背景色造成背景色混乱,或者设置不成功
- 不要用setalpha,而用setBackgroundColor(alp,255,100,100)成功解决
- 对话框移动动画:%0-100反而是缩小的动画,100%-0%反而是放大了,到底怎么回事?没解决
- 录音报错,主要是录音类必须所有配置完成之后才可以准备,否则状态不对
- scrollview滚动无效果,解决方案::scrollview.smoothScrollTo(0, 0);而不用其他方法,其他方法有时候会失效
- textview代码设置drawableleft不起作用:
- 解决Drawable drawable= getResources().getDrawable(R.drawable.drawable);
/// 这一步必须要做,否则不会显示.
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
myTextview.setCompoundDrawables(drawable,null,null,null);
- scrollview子布局高度发生变化时,会自动滑动到相应高度,但是要禁用这个功能
- 只需要重写他的这个功能即可
@Override
protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
return 0;
}
- glide加载圆角图片失败,imageview设置为centcrop等,只要有剪切就不能设置成功,所以一般不建议用,如果实在不能满足需要可以用cardview实现圆角
- 百度地图,把某一个点设置成中心点
//新建一个状态
MapStatus mMapStatus = new MapStatus.Builder()
.target(point)
.zoom(12)
.build();
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
map.setMapStatus(mMapStatusUpdate);
- asset目录在src\main目录下,否则不能读取
- 微信签名方式:b24faf618293d1d3032c0793cbe121fd56c1f96c,不能大写,不能有:否则分享失败,分享闪退
- viewpager,viewpagerindicator布局没设置,导致报错,这个布局是必须设置的,所以要先设置布局,再填充数据,这是一个固定的模式,以后也是这样一个流程
- 以后遇到viewpager,如果里面的内容超过一个控件一定要用fragment,否则后患无穷,问题太多了,千万不要自己定义view添加进去
- ++,和--,最好不要用,有时候他妈根本不起作用,还是规规矩矩的来吧,草
- startactivityforresult的时候,第二个activityfinish的时候如果带数据过去,必须只能finish一次,第二次finish的时候就不会再带数据了,而且finish之前必须setresult
- 软件原则,界面与数据分离,先写好界面,数据在界面完全初始化之后才逐个填充,数据驱动界面,
- fragment的ui重绘问题,如果view!=null的时候复用即可,包括数据也可以复用,这也同时可以解决数据多次加载问题
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_tableindex, container, false);
}
// 缓存的viewiew需要判断是否已经被加过parent,
// 如果有parent需要从parent删除,要不然会发生这个view已经有parent的错误。
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null) {
parent.removeView(view);
}
return view;
}
时间格式化的时候时间时long类型的,后面必须加L,要不然就格式化错误,因为他是整形的,只能达到整形的最大值,所以会格式化成1970年
打开别人的项目运行不起来,打开一个能运行的项目,然后在项目的gradle设置里面,按照能运行起来的项目的配置全部配置一遍即可
fragment嵌套fragment时zifragment有时不能显示数据,使用:mVpViewPager.setAdapter(new MyMessageViewPagerAdapter(getChildFragmentManager(), list, titles));而不用activity的getFragmentManager
下拉刷新列表中,设置条目点击事件时,下拉时就触发点击事件, 解决办法:在listview的adapter里面设置点击事件,而不是用itemclick事件
webview退出之后里面的音乐还在播放,用destroy方法可以停止,mWebViewWebView.destroy();
viewpager的多个标签页面销毁,导致数据异常,解决方法在笔记中搜索
fragment的onCreateView方法每次可见 时都会调用,而oncreate只调用一次,所以数据最好是在oncreate中加载,而不要放在oncreateview中免得每次可见时又去加载数据
startActivity方法会重新走要start的activity的oncreate方法,从而导致数据多次加载,所以在不需要startactivity的地方不要使用.
网络仓库第一次提交:1.建立网络仓库,2.克隆到本地,3.把自己的项目复制到克隆的文件夹,4设置要add的文件,5.提交,push
Android studio 项目那些文件需要提交到git中?1.app目录下除了build文件夹和iml文件 2. .gitIgnore和build.gradle文件(重要),gradle文件夹,gradlew,gradew.bat,这三个文件可传可不传,可以自动生成,但是不传的话编译的时间会很长 3.setting.gradle文件(重要) 4.如果有library依赖,则跟app目录下规则相同
视图树的使用:view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Log.e("行数", getLineCount() + "");//使用完以后需要,否则一直调用下去,view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
引入的库需要的最小api为16,当前项目最小api为14,不能因为引入一个库就把自己的项目的api升高,那么在manifest中配置如下代码:
<uses-sdk tools:overrideLibrary="com.facebook.shimmer引入的包名"/>
fragment替换的时候,布局中必须是fragmentlayout才能被fragment替换,否则会出问题.显示不出来,谨记!!!!!!!!!!!
- activity跳转携带map数据的实现方法:
- imageview的selector设置不起作用:解决方法,selector的默认状态的item放在最后面,否则不能显示正常
- selector使用:color文件夹下也可以建立selector文件,主要给设置color使用,如果给text设置selector必须用color的selector,同时selector的item中不可以有@null这样的引用,drawable文件夹下的selector中,drawable是可以用颜色值代替的,但是color文件夹下面的item的color属性只能用color值,而且background必须使用drawable,也就是作为background的selector的item必须是drawable标签,作为color值的selector的item标签必须为color,至于引用的是color值还是drawable的id,这个无关紧要,;;;;不能用color,条件:selector的默认属性状态的item放在在下面,也就是最上层才能起作用.否则默认不能实现效果,并且如果是不可点击的布局,必须设置点击事件,或者设置clickable为ture
- 环信引入easeui错误:必须删除build.gradle文件才行,环信也是服了你了,唉,不多写了.
- fragment只有依附activity或者是fragment之后才可以使用getactivity或者getcontext,否则得到的是null.
- View类的两个新api,超牛逼,超方便,view里面还有很多好东西,值得研究一下
- public boolean post (Runnable action),可以在这个方法里面更新ui,是一个非常方便的方法
- public boolean canScrollHorizontally (int direction)返回值代表是否可横向滑动,方向0代表向左,1代表向右public boolean canScrollVertically (int direction)同样,1代表向上,0代表向下
- 圆角图片显示方案:使用cardView,设置圆角,并且设置scaletype值,然后显示图片之后,再设置imageview的width为match_parent,高度为屏幕宽度的一半,这样就能按照合适的比例显示了(这是2:1,可以按照自己的需求去做),而且图片能够完全占满cardview,看起来非常漂亮,注意顺序,先加载图片,再去改变他的大小
ImageView view = (ImageView) holder.getView(R.id.iv);
Glide.with(getContext()).load(bean.img_src).into(view);
int width = DensityUtils.getDisplay(getActivity()).getWidth();
view.getLayoutParams().height = width / 2;
view.getLayoutParams().width = RecyclerView.LayoutParams.MATCH_PARENT;
方法数超限怎么办?:
插件:显示方法数Android Methods Count,
安卓开发引入很多第三方库容易冲突解决方案:单独建立一个module,里面放公共资源,utils,统计,分享,地图等第三方库,常用对话框,等等都放入这个module中,以后添加任何module的时候如果需要里面的资源就直接依赖即可,这个独立的module可以导入到任何工程中使用,而且节省了配置时间,同时第三方库的升级工作也可以分离开,更加方便更加安全
swipelayout之viewDraghelper:(1)getViewHorizontalDragRange方法的返回值应当是该childView横向或者纵向的移动的范围,当前如果只需要一个方向移动,可以只复写一个。其实是潮着某个方向移动的绝对值,比如向右移动,最多能移动多少,那就返回多少,因为向左移动最多也是返回这么多,这个是移动(2)
- 有时候测量控件出问题,使用viewutil也不行,可以页面加载一段时间之后再测量,就准确了
- float数据去掉整数后面的.0方法:if (((int) progress) == progress) {转为int值}else{保留原来值}
- fragment只有可见时才能显示出东西,才会调用oncreate,oncreateview等方法,有时候会用到
- fragmentdialog,v4包下的,使用,
- 适配不同屏幕,重写oncreatedialog方法,在此方法中返回一个v7下的alertdialog,并且setview
- 设置背景颜色,在oncreateview方法中getwindow,然后设置背景drawable
- 设置window的背景颜色,@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.dimAmount = 0.0f;
window.setAttributes(windowParams);
}
- 问题:The number of method references in a .dex file cannot exceed 64K.
- 解决方法:http://blog.csdn.net/LikeSidehu/article/details/52606442
- 其实不一定是方法数超过64k,可能是引用的库太多了,但是这个方法就是有用
- 还有的时候是因为引用的库或者jar重复了,这个就要新建一个工程,把所有的引用都配置成相同的,一个个删除,看看到底是哪个jar或者库重复了, 然后去掉
- Android studio中批量替换文本:edit->find->replace in path
- Error:Jack is required to support java 8 language 解决:
http://www.th7.cn/Program/java/201610/994364.shtml - 获取recyclerview已经滑动的高度
- public int getScollYDistance() {
int position = linearLayoutManager.findFirstVisibleItemPosition();
View firstVisiableChildView = linearLayoutManager.findViewByPosition(position);
int itemHeight = firstVisiableChildView.getHeight();
return (position) * itemHeight - firstVisiableChildView.getTop() }
51.textView.settextsize()默认就是用sp单位的,在显示时不管是sp还是dp都是换算成px值来显示的,
52.按下返回键让在后台运行,而不是退出程序
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(false);
return true;
}
return super.onKeyDown(keyCode, event);
}
53.fragment的hide show方法和replace方法的异同点:replace方法会销毁原来的fragment,而hide不会,所以如果只是使用一次就可以用replace,如果要频繁的替换多个fragment就用add之后hide和show
53.全屏配置,1.让自己的application使用appthem,然后appthem继承自noactionbar的them即可
2.在appthem中添加notitle,没有title,fullscreen全部全屏
3.单个activity可以配置自己的them
4.在activity中setcontentview之前,可以设置
5.screenorientation这个配置必须每个activity都配置才能起作用,不能继承下来
54.自定义控件中get到的技能
1.textview的settextSize方法中用的是sp值,但通过array.getDimension方法获取的值是px值,所以需要转换才能使用
2.getDimensionPixelOffset和getDimensionPixelOffset相同,但第一个返回int值,第二个返回float值,返回值都是px值,即使你设置的是dp值或者sp值,他都会转换成px值,平时用这两个方法就好了,另一个方法不好用,不说了
3.int color
= Color.argb(255,100,200,100);textview.setTextColor方法参数是int,可以使用这个方法把color值转换成int值,而且资源文件中获取到的color引用最后也都是转换成int值的.
4.shape的颜色可以动态通过代码改变,方法如下
GradientDrawable background = (GradientDrawable) tag.getBackground();
background.setColor(color);
tag.setBackgroundDrawable(background);
55.泛型继承:
1.A<T> extent B<T>那么这个t是从b继承下来的
2.A<T> extent B 那么这个t是A类里面自己定义的,
3.上面两种情况的使用方法是相同的,比如新建一个A的对象new A<T>();
4.A<T,E> extend B<T>,那么t是继承下来的,跟父类相同,e是自己新定义的.
56.PagerAdapter总结
1.直接用pageAdapter,内存中保存前一页和下一页,本页,总共三页数据,当然可以设置更多,实现4个方法
2.FragmentPageAdapter,内存中保存所有加载的页面,只需要实现两个方法
3.FragmentStatePagerAdapter,内存中只会保存当前页面,任何不可见页面都会被销毁,省内存,但是反复加载数据,浪费性能,除非页面的数据非常庞大,并且也特别多的页面,否则不建议使用,只需要实现两个方法