- 持續更新中
- 佈局適配,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,內存中只會保存當前頁面,任何不可見頁面都會被銷燬,省內存,但是反覆加載數據,浪費性能,除非頁面的數據非常龐大,並且也特別多的頁面,否則不建議使用,只需要實現兩個方法