編輯:關於Android編程
最近在項目中遇到一個問題,要求顯示下面的效果。
如圖所示,“所屬農莊”必須緊挨在“商品名字”後面,但當商品名字過長時必須使得所屬農莊顯示完整,並且商品名字中顯示不全的部分使用省略號,開始一直沒弄出來,後面想到用layout_align****,才成功實現其效果。
其他不說,先來來看看layout_align**** 的用法。
layout_align**** 是RelativeLayout布局中子控件所擁有的一個用來幫助確定顯示位置屬性。align翻譯過來為對齊,所以layout_align**** 即為與某某對其,先看例子:
顯示效果:
其中
layout_alignRight=@id/shop_item_name
表示與id=shop_item_name的控件又對齊,即“所屬農莊”的右邊緣與“商品名字”的右邊緣重合。
layout_align** =@id/shop_item_name
顧名思義,是該兩個控件的** 邊重合。
當日RelativeLayout中還有些比較特別的控件,
比如
android:layout_alignBaseline=@id/shop_item_name
表示“所屬農莊”控件中的文字與“商品名字”控件中的文字的下邊對齊;
比如
android:layout_alignParentLeft=true
android:layout_alignParentTop=true
android:layout_alignParentRight=true
android:layout_alignParentBottom=true
分別表示與該控件的父控件的左、上、右、下邊緣對齊
上面代碼中的實現效果
明顯不符合要求,想要實現符合要求的布局必須在控件“商品名字”中添加代碼:
android:paddingRight=控件'所屬農場'的長度
其中padding** 即該控件中的內容距該控件** 邊緣的距離
完整代碼如下:
實現效果:
下面介紹其中涉及到的怎麼動態獲取控件的長度和動態設置控件的padding值
1、動態獲取控件長度
在獲取控件高寬的時候不能直接在代碼中使用
int width = holder.mTvName.getWidth();
來獲取,因為只有在measure方法被調用之後才能獲取到控件的真實長度,所以必須通過利用ViewTreeObserver 監聽來獲取控件高寬。使用方式如下:
ViewTreeObserver vto = holder.mTvName.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
holder.mTvName.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = holder.mTvName.getWidth();
}
});
2、在代碼中設置控件的padding
holder.shopName.setPadding(left, top, right, bottom);
設置控件中內容距離控件左、上、右、下邊緣的距離,單位為px
完整代碼:
ViewTreeObserver vto = holder.mTvName.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
holder.mTvName.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = holder.mTvName.getWidth();
holder.shopName.setPadding(0, 0, width + 5, 0);
}
});
序言首先流暢度不僅僅是受到代碼的影響。也會跟機器的硬件配置有關系。所以第一點需要明確的是,流暢度最低保證在哪個硬件配置之上。這樣有了一個基點之後,才能比較好明確優化目標。
話不多說:先撸一個html:名字叫index.html,這個html放到哪裡,大家應該都知道吧,哈哈!!!!<!--// Created by wangdan o
Android Studio目前已經成為開發Android的主要工具,用熟了可謂相當順手。作為開發者,調試並發現bug,進而解決,可是我們的看家本領。正所謂,工欲善其事必
當我們的手指在Android屏幕上點擊或滑動時,就會觸發觸摸事件TouchEvent。在App中ViewGroup和View存在多級嵌套,在最外層的是Activity,最