Android顏色值所支持的4個格式
Android中顏色值是通過紅(Red)、綠(Green)平道、藍 (Blue)三原色睹欲,以及一個透明度(Alpha)值來表示的,顏色值總是以井號(#)開頭一屋,接下來就是Alpha-Red-Green-Blue的形 式窘疮。其中Alpha值可以省略,如果省略了Alpha的值冀墨,那么該顏色默認是完全不透明的闸衫。
Android的顏色值支持常見的四種形式如下所示:
- #RGB:分別指定紅、綠诽嘉、藍三原色的值(只支持0~f這16級顏色)來代表顏色楚堤。
- #ARGB:分別指定紅疫蔓、綠含懊、藍三原色的值(只支持0f這16級顏色)及透明度(只支持0f這16級透明度)來代表顏色身冬。
- #RRGGBB:分別指定紅、綠岔乔、藍三原色的值(支持00~ff這256級顏色)來代表顏色酥筝。
- #AARRGGBB:分別指定紅、綠雏门、藍三原色的值(支持00fff這256級顏色)及透明度(支持00fff這256級透明度)來代表顏色嘿歌。
上面四種形式中,A茁影、R宙帝、G、B都代表一個十六進制的數(shù)募闲,其中A代表透明度,R代表紅色的數(shù)值,G代表綠色數(shù)值实撒,B代表藍色數(shù)值桨菜。
/**
* 顏色透明度的轉換
*
* @param color color值 eg.#AARRGGBB
* @param alpha alpha值
* @return 最終的狀態(tài)欄顏色 A single color value in the form 0xAARRGGBB.
*/
private static int calculateStatusColor(@ColorInt int color, int alpha) {
float a = 1 - alpha / 255f;//不透明度
int red = (color >> 16) & 0xff;
int green = (color >> 8) & 0xff;
int blue = color & 0xff;
red = (int) (red * a + 0.5);//乘以不透明度,得到新的R的值
green = (int) (green * a + 0.5);
blue = (int) (blue * a + 0.5);
return (0xff << 24) | (red << 16) | (green << 8) | blue;
}
附:顏色透明度的轉換
當在命令行執(zhí)行javac遇到GBK不可編碼的錯誤時
要出,在javac后面加上-encoding UTF-8
就ok了
上傳開源庫到jcenter踩坑
注冊賬戶時別注冊錯了鸳君,個人用戶的話點這個網(wǎng)址注冊,拉到底部
在執(zhí)行如下操作的時候很慢
./gradlew install
./gradlew bintrayUpload
可在此Gradle Distributions手動下載,然后手動添加到C:\Users\asus\.gradle\wrapper\dists
此目錄下,
每個gradle包的上一層目錄都有一個AndroidStudio生成的隨機字符串。我們將下載好的包放在隨機生成的字符串的下一層就行了患蹂。
開源庫更新版本./gradlew bintrayUpload
Socket通信過程中遇到的一些困惑
當pc端做server 手機端做client端的時候
進入cmd命令行輸入 ipconfig 即可查詢到電腦的ip 而任意一個地址都可作為 服務器端的主機IP地址
類名.this.方法
- 當在一個類的內部類中或颊,如果需要訪問外部類的方法或者成員域的時候,如果使用 this.成員域(與 內部類.this.成員域 沒有分別) 調用的顯然是內部類的域 传于, 如果我們想要訪問外部類的域的時候囱挑,就要必須使用 外部類.this.成員域
public class Test{
public void A(){
System.out.println("外部類A);
}
Thread thread = new Thread(){
public void A() {
System.out.println("inner A");
}
thread.start();
public void run(){
System.out.println("內部類run");
Test.this.tn();//調用外部類的A方法。
this.tn();//調用內部類的A方法
}
}
從當前的activity跳轉到某個活動的一個fragment中
①在對應activity中使用意圖跳轉到MainActivity中格了,這里通過意圖塞入了一個標識符(更嚴謹?shù)姆绞绞峭ㄟ^請求碼和結果碼實現(xiàn))
// 登錄成功跳轉到我的京東首頁
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
intent.putExtra("contactsList", 1);//跳轉到聯(lián)系人列表那個fragment
startActivity(intent);
②在MainActivity的onResume()方法中得到這個標識符看铆,并且切換到相應的Tab即可
@Override
protected void onResume() {
int id = getIntent().getIntExtra("contactsList", 0);
if(id == 1 ) {
mTabHost.setCurrentTab(3); //3代表”聯(lián)系人列表那個fragment 的位置
}
super.onResume();
}
比較兩個字符串是否相等
- 比較兩個字符串是否相等應該用equals();函數(shù)而不能簡單的用”==“,因為”==“判斷的是這兩個string類型的變量的內存地址是否相同而不是兩字符串的內容。判斷兩個字符串內容是否相同應該用equals();
9.png
- 9.png的上邊框和左邊框繪制的部分就表示當圖片需要拉伸時就拉伸黑點標記的區(qū)域,
在下邊框和右邊框繪制的部分則表示內容會被放置的區(qū)域盛末。
gravity 和 layout_gravity區(qū)別
android:gravity = "";//是相對于這個控件本身
android:layout_gravity = "";//是相對于這個控件的父元素
Android MD 控件TabLayout的一些屬性
app:tabMode="fixed"
app:tabIndicatorHeight="0dp"
app:tabSelectedTextColor="@color/color_bottom_text_selected"
app:tabTextColor="@color/color_bottom_text_normal"
app:tabBackground="@null"
app:tabGravity="fill"
mViewPager.setCurrentItem(index); //設置當前選中的fragment
開源庫 SwipeBackLayout 的使用
- 項目地址:https://github.com/ikew0ng/SwipeBackLayout#swipebacklayout
- 使用過程中出現(xiàn)了先出現(xiàn)黑屏然后才出現(xiàn)上一個activity的現(xiàn)象,可在values/styles里面的主題里添加
<item name="android:windowIsTranslucent">true</item>
- 禁止向左向右或向下滑動可使用
getSwipeBackLayout().setEnableGesture(false);//設置默認不能滑動退出
- 設置滑動退出方式
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_RIGHT);
//向右滑動退出
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT);
//向左滑動退出
getSwipeBackLayout().setEdgeTrackingEnabled(SwipeBackLayout.EDGE_BOTTOM);
//向下滑動退出
- 在虛擬機中使用SwipeBackLayout時會出現(xiàn)向左滑動出現(xiàn)的是手機的主界面而不是上一個活動的界面,這個是為什么我不知道,有人知道么?
EventBus OnEventMainThread()里收不到消息
- 需要在使用EventBus的地方注冊與解注冊弹惦,用一次就要注冊與解注冊一次
EventBus.getDefault().register(this); //注冊
EventBus.getDefault().unregister(this); //解注冊
變長變量
protected Void doInBackground(String... params) ;
- ...表示變長變量:可以傳一個或多個變量進來;
如果只傳一個參數(shù)的話就用params0獲取到那一個參數(shù),同理取得可能的更多的參數(shù).
異步線程
因為android主線程最好不要處理太多的邏輯,而界面的刷新要在主線程里執(zhí)行,所以用AsyncTask處理復雜的邏輯關系,并在處理結束之后刷新界面.其中最主要的需要重寫的方法有三個
onPreExecute();
doInBackground();
onPostExecute();
This Activity already has an action bar supplied by the window decor
- 在AndroidManifest.xml:
<activity android:name=".activity.YourActivity"
android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->
ToolBar的使用
getSupportActionBar().setDisplayHomeAsUpEnabled(true);//設置返回箭頭
//
setDisplayHomeAsUpEnabled(true);//設置返回箭頭
setNavigationOnClickListener()//設置返回按鈕監(jiān)聽;
setNavigationViewIcon(); //設置返回按鈕左邊的按鈕悄但,同時棠隐,這個方法需要在調用過
setSupportActionBar(ToolBar ); 之后調用才有效;
setLogo();//設置圖標檐嚣;
setDisplayUseLogoEnabled();//設置圖標是否顯示助泽。
setTitle();//設置標題
setSubTitle();//設置副標題啰扛;
setOnMenuItemListener(); //設置最右邊的選項按鈕監(jiān)聽。