有時 Intellij IDEA 在更新過後
或是沒有任何原因的出現 cannot resolve symbol 錯誤
但 Class 是確定存在的
此時解決的辦法就是到 File -> Invalidate Caches / Restart...
但要注意的是本地的檔案修改紀錄會完全消失
有時 Intellij IDEA 在更新過後
或是沒有任何原因的出現 cannot resolve symbol 錯誤
但 Class 是確定存在的
此時解決的辦法就是到 File -> Invalidate Caches / Restart...
但要注意的是本地的檔案修改紀錄會完全消失
當專案內有設定 Websocket 相關的設定時
啟動JUnit時會發生 No suitable default RequestUpgradeStrategy found 錯誤
這是因為一般進行測試時並不會依賴於一個執行中的Tomcat Server
因此當 Websocket 設定讀取時 DefaultHandshakeHandler 會嘗試尋找 Server 的相關 class 導致錯誤
此時只要在測試階段加入以下嵌入式的 Tomcat Library 即可
- <!-- Libraries for testing Websocket -->
- <dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-core</artifactId>
- <version>8.0.8</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-websocket</artifactId>
- <version>8.0.8</version>
- <scope>test</scope>
- </dependency>
若出現中文顯示為亂碼的情形
可直接在 pom.xml 加入編碼設定即可
- <!-- Surefire test plugin -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.17</version>
- <!-- 預防使用 Maven test 時中文顯示為亂碼 -->
- <configuration>
- <argLine>-Dfile.encoding=UTF-8</argLine>
- </configuration>
- </plugin>
在具有輸入介面時
Android 會自動跳出虛擬鍵盤給使用者輸入
但有時卻不會自動隱藏
或是有時我們需要手動隱藏虛擬鍵盤
就可以使用以下方式
顯示虛擬鍵盤使用方式詳見此篇介紹
- // 取得鍵盤管理物件
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- // 隱藏指定 view 的虛擬鍵盤, 通常會是 EditText
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
若直接使用 background 屬性修改按鈕等物件的背景顏色時通常無法保留點擊效果
如 android:background="#333333" 雖然修改了背景顏色
點擊觸發的預設動畫卻也跟著不見了
但其實是有辦法可以保留並自訂點擊特效的顏色
不論是背景顏色還是點擊效果的顏色都可以修改
方法就是將以下 xml 設定新增到 drawable 目錄底下即可
套用方式則是修改 background 屬性值
android:background="@drawable/YOUR_DRAWABLE_FILE_NAME"
我們先看 API 21 以上的版本修改方式
新增一個 drawable 的 Resource
並將內容修改為以下 xml 格式
- <ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/main_login_button_ripple">
- <item android:drawable="@color/main_login_button_background"/>
- </ripple>
@color/main_login_button_ripple 為點擊後效果的顏色 可自行在 color.xml 設定
@color/main_login_button_background 為按鈕背景顏色 可自行在 color.xml 設定
API 20 以下的版本則要使用以下格式的 xml
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:drawable="@color/main_login_button_ripple" android:state_pressed="true"/>
- <item android:drawable="@color/main_login_button_ripple" android:state_focused="true"/>
- <item android:drawable="@color/main_login_button_background"/>
- </selector>
@color/main_login_button_ripple 為點擊後效果的顏色 可自行在 color.xml 設定
@color/main_login_button_background 為按鈕背景顏色 可自行在 color.xml 設定
所以其實就是自訂兩個 color 參數
分別給背景與特效使用即可
當然此方法也可以自訂背景的形狀 例如加上圓角
方法跟 layer-list 相同
- <ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/fav_item_ripple">
- <item>
- <shape>
- <solid android:color="@color/fav_item_background"></solid>
- <corners android:radius="10px"></corners>
- </shape>
- </item>
- </ripple>
當我們在同一個 activity 內需要跳出一個小型的 layout 供使用者操作時
如輸入方塊、提示、顯示圖片
在此若要同時遮蔽上一層 layout 的點擊狀態
我們就需要做一個滿版的 layout
並在 layout 上加入 clickable="true" 這個屬性
就可以遮蔽上一層 layout 內的所有點擊事件了
- <RelativeLayout
- android:id="@+id/articleContentCommentHolder"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#99000000"
- android:visibility="gone"
- android:alpha="0"
- android:clickable="true">
- </RelativeLayout>