[Android Studio] 一些實用指令及注意事項 contains, replace, replaceAll, replaceFirst, setImageLevel, weight, ShapeDrawable, RoundRectShape

工作日誌 Day 12-14

contains, replace, replaceAll, replaceFirst, setImageLevel, weight

※ 找出字串中包含的內容並取代

※ 同一個ImageView塞入多張圖片

※ 更改APP應用程式的註冊名稱(真實名稱)

※ 如何程式動態改變 layout 形狀、顏色

※ 屬性 Weight 的注意事項


這幾天出去玩,做的東西比較少...

把上個 load more 的外觀改造了一下 

 


找出字串中有無指定字元 ( contains )

String str = "FIGHT";

Boolean ans = str.contains("G");     //  回傳true


找出字串中包含的內容並取代 ( replace, replaceAll, replaceFirst )

String str = " \"ABC-abc\" ";

String ans = str.replace("\"","");    // 原本為 "ABC-abc" 回傳 ABC-abc

String ans = str.replaceAll("[a-z]","x")   // 原本為 "ABC-abc" 回傳 "ABC-xxx"

String ans = str.replaceFirst("[a-z]","x")   // 原本為 "ABC-abc" 回傳 "ABC-xbc"


文字加上刪除縣

TextView txv = (TextView)findViewById(R.id.txv);
txv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);

同一個ImageView塞入多張圖片 ( setImageLevel  )

先創一個 xml 檔,放在drawable內

power_state.xml

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="0" android:drawable="@drawable/state0" />
<item android:maxLevel="1" android:drawable="@drawable/state1" />
<item android:maxLevel="2" android:drawable="@drawable/state2" />
<item android:maxLevel="3" android:drawable="@drawable/state3" />
<item android:maxLevel="4" android:drawable="@drawable/state4" />
</level-list>  

接著 java 內使用

ImageView image=(ImageView)findViewById(R.id.image);
image.setImageResource(R.drawable.power_state);
image.setImageLevel(4);

如此會顯示state4這張圖片

這個功能除了可以在同一個ImageView內塞入多張圖片外

也可以輕鬆地配合計時器,達到簡單的動畫製作


更改APP應用程式的註冊名稱(真實名稱)

打開 build.gradle (Module:app)

修改 applicationId 即可,如下圖


如何程式動態改變 layout 形狀、顏色

float radius = 50.0f;
float[] outerR = new float[]{radius, radius, radius, radius, radius, radius, radius, radius};
RoundRectShape roundRectShape = new RoundRectShape(outerR, null, null);  //  宣告一個圓角矩形
ShapeDrawable shapeDrawable = new ShapeDrawable(roundRectShape); // 宣告一個形狀為圓角矩形的ShapeDrawable
shapeDrawable.getPaint().setColor(0xfedcba);         // 顏色
shapeDrawable.getPaint().setStyle(Paint.Style.FILL);   //  設定樣式為填滿
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.linearlayout);
linearLayout.setBackground(shapeDrawable);

最簡單的方法當然是直接製作一個xml檔 直接畫出想要的圖形

但那樣是寫死的,如果想動態改變,就可參考以上寫法 Button,TextView 以此類推


屬性 Weight 的注意事項

我們都知道weight可以依畫面大小比例來設定高或寬的權重

但這邊有個非常重要的細節一定要注意

weight是扣掉已經被佔有的dp後,以剩下的空間為100%去計算

也就是說

你想要不被干擾的最簡單方法就是

把所有元件的 高 或 寬 的dp 全部設定為 0dp ,再去調整他們個別的weight即可

小觀念提醒:

設定 dp 的話就是不管在哪支手機上看起來都會 一樣大


 

 

參考資料

http://blog.sina.com.cn/s/blog_a73687bc0101ds68.html

http://blog.xuite.net/x_3kkk/java/11380225-%E5%AD%97%E4%B8%B2%E7%9A%84%E6%8A%BD%E5%87%BA%E8%88%87%E5%8F%96%E4%BB%A3(+substring+%2F+replace+)

http://pydoing.blogspot.tw/2011/01/java-contains.html

http://blog.csdn.net/zhangphil/article/details/48936209

http://androchen.logdown.com/posts/2014/10/31/android-screen-resolution-and-size-problems