(2018.7.28)特地來更新:對于之前看到了這篇博客的同仁們,只能說:很抱歉把你們帶坑里去了(如果有人看的話)楞泼。目前最簡單粗暴的實現(xiàn)思路:
利用延時,讓view初始化完畢之后笤闯,直接通過自身的特點滑動到指定的位置
tablayout.postDelayed(new Runnable() {
@Override
public void run() {
tablayout.getTabAt(position).select();
}
}, 100);
上面的方法對tab的個數(shù)沒有限制堕阔。
實現(xiàn)思路(這個思路是個坑,但是我還是要留在這里):
滑動的距離 = 滑動的位置 x 每個item 的寬度+偏移量
實現(xiàn)代碼如下:
//初始化tablayout數(shù)據(jù)
private void initTab() {
int position = getIntent().getIntExtra("position", 0);
for (int i = 0, length = titles.length; i < length; i++) {
TabLayout.Tab tabAt = tablayout.newTab();
tabAt.setCustomView(R.layout.tab_item_layout);
TextView tab_title = (TextView) tabAt.getCustomView().findViewById(R.id.title_value);
tab_title.setGravity(Gravity.CENTER);
tab_title.setText(titles[i]);
tablayout.addTab(tabAt);
}
setDefaultTable(position, true);
}
/**
* 選擇默認的選中項
*
* @param position 注意下角標從0開始
* @param needScroll 僅僅第一次需要滑動
*/
public void setDefaultTable(int position, boolean needScroll) {
if (position < 0)
position = 0;
if (position >= titles.length)
position = titles.length - 1;
tablayout.getTabAt(position).select();
if (tablayout.getTabAt(position).isSelected()) {
View customView = tablayout.getTabAt(position).getCustomView();
TextView tab_title = (TextView) customView.findViewById(R.id.title_value);
tab_title.setGravity(Gravity.CENTER);
if (needScroll) {
int spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
tab_title.measure(spec, spec);
int measuredWidthTicketNum = tab_title.getMeasuredWidth();
// measuredWidthTicketNum = px2dp(measuredWidthTicketNum);
Log.i("TAG", "條目的寬度是" + measuredWidthTicketNum);
Log.i("TAG", "mWidth=" + mWidth);
recomputeTlOffset1(position, measuredWidthTicketNum);
}
}
}
/**
* 重新計算需要滾動的距離
*
* @param index 選擇的tab的下標
*/
private void recomputeTlOffset1(int index, int viewWidth) {
if (tablayout.getTabAt(index) != null) tablayout.getTabAt(index).select();
//加上半個item的寬度(這個需要自己微調颗味,不一定是半個)如果有設置margin還需要加上margin的距離
int halfWidth = viewWidth / 2; //偏移量
final int width = ((viewWidth + halfWidth) * index);
Log.i("TAG", "tablayout.getResources().getDisplayMetrics().density=" + tablayout.getResources().getDisplayMetrics().density);
Log.i("TAG", "移動的距離是" + width);
tablayout.post(new Runnable() {
@Override
public void run() {
tablayout.smoothScrollTo(width, 0);
}
});
}