動態(tài)改變控件位置的方法:

10多年的高淳網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整高淳建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“高淳網(wǎng)站設計”,“高淳網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
setPadding()的方法更改布局位置。
如我要把Imageview下移200px:
ImageView.setPadding( ImageView.getPaddingLeft(), ImageView.getPaddingTop()+200,
ImageView.getPaddingRight(), ImageView.getPaddingBottom());
動態(tài)改變控件大小的方法:
1、聲明控件參數(shù)獲取對象 LayoutParams lp;
2、獲取控件參數(shù): lp = 控件id.getLayoutParams();
3、設置控件參數(shù):如高度。 lp.height -= 10;
4:、使設置生效:控件id.setLayoutParams(lp);
有2種方法可以設置TextView文字居中:\x0d\x0a一:在xml文件設置:android:gravity="center"\x0d\x0a二:在程序中設置:m_TxtTitle.setGravity(Gravity.CENTER);\x0d\x0a\x0d\x0a備注:android:gravity和android:layout_gravity的區(qū)別在于前者對控件內(nèi)部操作,后者是對整個控件操作。\x0d\x0a例如:\x0d\x0aandroid:gravity="center"是對textView中文字居中\(zhòng)x0d\x0aandroid:layout_gravity="center"是對textview控件在整個布局中居中\(zhòng)x0d\x0a其實很容易理解,出現(xiàn)"layout"就是控件對整個布局的操作\x0d\x0a\x0d\x0aTextView文字垂直靠左居中,\x0d\x0a\x0d\x0a設置android:gravity="center_vertical|left"。\x0d\x0a\x0d\x0aandroid:gravity="center", 垂直水平居中\(zhòng)x0d\x0aLinearLayout有兩個非常相似的屬性:android:gravity與android:layout_gravity。他們的區(qū)別在于:android:gravity用于設置View組件的對齊方式,而android:layout_gravity用于設置Container組件的對齊方式。\x0d\x0a舉個例子,我們可以通過設置android:gravity="center"來讓EditText中的文字在EditText組件中居中顯示;同時我們設置EditText的android:layout_gravity="right"來讓EditText組件在LinearLayout中居中顯示。\x0d\x0a
親,記得好評喲!
在android的開發(fā)中,經(jīng)常會遇到需要主動去設定某條ListItem的位置的需求。設置位置的函數(shù)有
ListView.setSelection(int position)
ListView.setSelectionFromTop(int position, int y);
其中
position指的是指定的item的在ListView中的索引,注意如果有Header存在的情況下,索引是從Header就開始算的。
y指的是到ListView可見范圍內(nèi)最上邊邊緣的距離。
函數(shù)有了,現(xiàn)在就是根據(jù)自身需求來進行設置。
這次遇到的需求,ListView要求是從下往上展示的,并且當Cursor更新時,要保持住原先的最上方的item(不包括header)的位置不變,然后新的歷史數(shù)據(jù)在原先那條item上方繼續(xù)向上展示。如圖:
ListView從下往上展示,也就是
android:stackFromBottom="true"
但是發(fā)現(xiàn)這一屬性的設置不會影響索引的排序順序,也就是item的索引都是從上往下遞增的,不會變成從下往上遞增。索引為0的item,都是在ListView的最上方的item(或header).
那么當Cursor更新時,原先第一條的索引便會發(fā)生變化。要想保持住它(圖中的 R)的位置。步驟如下:
(1)獲取這一條在新Cursor中的位置(posiition)
(2)獲取這一條在更換Cursor后ListView中的位置。
(4)由于ListView的可滾動的屬性,我們需要記錄更換Cursor前可視的第一條item的索引(ListView.getFirstVisiblePosition())
(3)區(qū)分FirstVisiblePosition是0和大于0的情況。由于header,也就是圖中的Loading那一條在新數(shù)據(jù)出來后是會消失的。
(4)當FirstVisiblePosition為0時實際指向的是header,我們要保持位置不變的是header下面第一條(R)的位置。那么此時要設置FirstVisiblePosition為1
(5)當FirstVisiblePosition大于0時實際指向的就是item,但是我們需要設置FirstVisiblePosition為0。*
(6)我們根據(jù)FirstVisiblePosition用ListView.getChildAt(int position)函數(shù)獲取對應的item的View,再根據(jù)View.getTop()函數(shù)獲取到ListView頂部的距離Y。
這樣ListView.setSelectionFromTop(int position, int y)所需的兩個參數(shù) position 和 y就都有了。
*注解:ListView.getChildAt(int position), 這個position指的是在可視的item中的索引,跟cursor里的位置是大不一樣的。可以看看ListView.getChildCount()函數(shù)得到個數(shù)是小于或等于Cursor里的個數(shù)的(不考慮header的話)。雖然一共可能有20條數(shù)據(jù),但是界面只能看到8條,那么這個ChildCount大約就是8了。另一方面, FirstVisiblePosition取出的是在總的條數(shù)中的索引,再將會消失的header考慮進來,所以就是 FirstVisiblePosition為0時要設為1,大于0時又要設為0。
下面上代碼:
調(diào)用的代碼:
int headerCount = mListContainer.getListView().getHeaderViewsCount();
int firstVisiblePos = mListContainer.getListView().getFirstVisiblePosition();
int newCursorPosition = getPositionInNewCursor(cursor.getCount(), firstVisiblePos);
int offsetY = getOffsetY(cursor, firstVisiblePos, newCursorPosition);
mAdapter.changeCursor(cursor);
mUpRefreshLayout.setVisibility(View.GONE);
mListContainer.getListView().setSelectionFromTop(newCursorPosition + headerCount, offsetY);
getPositionInNewCursor函數(shù):
private int getPositionInNewCursor(int newCursorCount, int firstVisiblePos){
if(firstVisiblePos == 0){
firstVisiblePos += 1;
}
int headerCount = mListContainer.getListView().getHeaderViewsCount();
int newCursorPos = newCursorCount - mAdapter.getCount() + firstVisiblePos - headerCount;
return newCursorPos;
}
getOffsetY函數(shù):
private int getOffsetY(Cursor cursor, int firstVisiblePos, int newCursorPosition){
int y;
View firstVisibleItem = null;
if(firstVisiblePos == 0){
firstVisibleItem = mListContainer.getListView().getChildAt(1);
}else{
firstVisibleItem = mListContainer.getListView().getChildAt(0);
}
y = firstVisibleItem.getTop();
View timeView = firstVisibleItem.findViewById(R.id.time_text_view);
if(timeView != null timeView.getVisibility() == View.VISIBLE){
Cursor curItem = (Cursor)mAdapter.getItem(newCursorPosition);
Cursor preItem = (Cursor)mAdapter.getItem(newCursorPosition - 1);
if(curItem != null || preItem != null){
long curTimeStamp = curItem.getLong(MessagesProjection.JEDI_CREATE_DATE_INDX);
long preTimeStamp = preItem.getLong(MessagesProjection.JEDI_CREATE_DATE_INDX);
if(Math.abs(curTimeStamp - preTimeStamp) = SHOW_TIME_STAMP_TEN_MINS){
LayoutParams param = (LinearLayout.LayoutParams)mTimeView.getLayoutParams();
y += mTimeView.getHeight() + param.topMargin + param.bottomMargin;
}
}
}
return y;
}
getOffsetY中有一段計算圖中TimeStamp的高度的代碼,不關心的可以自己跳過一下。
當前文章:android設置位置,安卓設置位置
分享鏈接:http://chinadenli.net/article27/dssphjj.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、虛擬主機、標簽優(yōu)化、微信小程序、云服務器、網(wǎng)頁設計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)