popupWindow+軟鍵盤彈出,edittext設置,textview字體顏色設置,log打印過長顯示不出來的問題

最近開發遇到的問題:

  1. popupWindow上有輸入框,我希望在軟件盤彈出的時候popupWindow可以上移,蒐集了很多資料,有的說通過屏幕的大小減去Activity顯示的大小,就是鍵盤的高度,然後動態設置popupWindow的大小,但是沒有實現.因爲popupWindow的大小就是屏幕的大小,所以此時Activity顯示的大小就是0.
/**
 2. 獲取鍵盤的高度,設置scrollview的大小
*/
public void setScrollViewHight() {
    ll_root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        /**
         * the result is pixels
         */
        @Override
        public void onGlobalLayout() {

            Rect r = new Rect();

            //獲取可見高度
            int visiableHeight = r.bottom - r.top;
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) myScrool.getLayoutParams();
            //獲取當前控件的佈局對象
            params.height = visiableHeight;//設置當前控件佈局的高度
            myScrool.setLayoutParams(params);//將設置好的佈局參數應用到控件中
            ll_root.getWindowVisibleDisplayFrame(r);

            int screenHeight = ll_root.getRootView().getHeight();
            int heightDifference = screenHeight - visiableHeight;
            Log.e("可見高度是", visiableHeight + "");
            Log.e("Keyboard Size", "Size:" + heightDifference);

            //boolean visible = heightDiff > screenHeight / 3;
        }
    });
}

所以我使用了另一種方式,就是設置popupWindow的屬性,據說這兩個屬性的位置不可以變,我沒有測試,但是設置之後也沒其效果,之後我就通過問一些大神知道了popupWindow必須被scrollview包裹纔行,不然不可以彈出.

menuWindow.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED);
                menuWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

也有說找到這個activity的配置文件設置這個屬性android:windowSoftInputMode = “stateVisible|adjustResize”但是我的也沒有效果,之後沒有測試,可能是我開始沒有用scrollview做頂級佈局吧.如果是”adjustPan|stateHidden”則鍵盤彈出佈局不會上移,還有其他的屬性,這裏就不一一例舉了.

  1. EditText不能輸入小數,只要把android:inputtype=”number”(整數),可以number改爲numberDecimal即可,還有其他的edittext的設置可以參照以下網址進行動態設置

2.EditText在使用的時候想它只獲取焦點,如果用戶不點擊就不彈出軟鍵盤,需要設置這個屬性就可以.參考設置EditText只獲取焦點,不彈出軟鍵盤
android:windowSoftInputMode=”stateHidden”
3. 設置Textview的字體顏色的幾種方式:
在類文件中動態設置


 - textview.setTextColor(this.getResources().getColor(R.color.red));
 - textview.setTextColor(Color.rgb(255,255, 255));
 - textview.setTextColor(Color.parseColor("#FFFFFF"));
 - textview.setTextColor(Color.parseColor("#FFFFFF"));
 - tv.setTextColor(0xffff00ff);//0xffff00ff是int類型的數據,分組一下0x|ff|ff00ff,0x是代表顏色整數的標記,ff是表示透明度,ff00ff表示顏色,注意:這裏ffff00ff必須是8個的顏色表示,不接受ff00ff這種6個的顏色表示。

設置控制器,在drawable文件夾下創建對應的文件,設置其各種狀態下的顏色.
在佈局文件中設置,佈局文件的設置相對來說比較簡單,但屬於靜態設置.


 - android:textColor="@color/red"
    <color name="red">#FF0000</color>

 - android:textColor="#ffffff"
  1. log打印過長顯示不出來,在獲取數據的時候經常會出現數據只打印一半這樣解析很費勁,後來看源碼瞭解到log打印有限制,最大是4k(就是字符串的長度),所以我們可以設置一下,防止超過最大長度我們可以設置一個小點的閾值,segmentSize = 3 * 1024,低於這個值就直接打印,,超過的就截成段來打印即可.
public class LogUtil {
    /**
     * 截斷輸出日誌
     * @param msg
     */
    public static void e(String tag, String msg) {
        if (tag == null || tag.length() == 0 
                || msg == null || msg.length() == 0)
            return;

        int segmentSize = 3 * 1024;
        long length = msg.length();
        if (length <= segmentSize ) {// 長度小於等於限制直接打印
             Log.e(tag, msg);
        }else {
            while (msg.length() > segmentSize ) {// 循環分段打印日誌
                String logContent = msg.substring(0, segmentSize );
                msg = msg.replace(logContent, "");
                Log.e(tag, logContent);
            }
            Log.e(tag, msg);// 打印剩餘日誌    
        }
    }
}

這些都是平時用的挺多的,每次查每次忘,所以整理一下,方便以後使用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章