我在尝试在下方添加一条线时遇到了麻烦TabLayout,但它必须在选择线后面.应该是这样的:
我已经尝试添加自定义视图,但每个标签内部都有一些边距,所以没有解决.
有任何想法吗?
这就是我现在所得到的:
这是我如何在XML上添加它:
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="60dp"
app:tabBackground="@color/white"
app:tabIndicatorColor="@color/colorAccent"
app:tabTextColor="@color/white"/>
Run Code Online (Sandbox Code Playgroud)
这就是我通过代码做的事情:
private void configureTabLayout() {
TabLayout.Tab tabHome = mTabLayout.newTab().setIcon(R.drawable.ic_home_cinza);
TabLayout.Tab tabEmprestimos = mTabLayout.newTab().setIcon(R.drawable.ic_emprestimos_cinza);
TabLayout.Tab tabPersonal = mTabLayout.newTab().setIcon(R.drawable.ic_usuario_cinza);
View root = mTabLayout.getChildAt(0);
if (root instanceof LinearLayout) {
((LinearLayout) root).setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
GradientDrawable drawable = new GradientDrawable();
drawable.setColor(getResources().getColor(R.color.silver));
drawable.setSize(2, 1);
((LinearLayout) root).setDividerPadding(10);
((LinearLayout) root).setDividerDrawable(drawable);
}
mTabLayout.addTab(tabHome);
mTabLayout.addTab(tabEmprestimos);
mTabLayout.addTab(tabPersonal);
mTabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
}
Run Code Online (Sandbox Code Playgroud) 我需要执行请求,如果我的令牌过期,我需要刷新它并重试请求.
这就是我尝试这样做的方式,此刻我可以刷新令牌,但它会抛出一个NetworkOnMainThreadException.它完成了请求,更新令牌并到达日志,但是这个例外它杀了我.我怎么能避免这种情况?
public Observable<Estabelecimento> listarEstabelecimentos() {
return Observable.defer(this::getListarEstabelecimentoObservable)
.retryWhen(throwableObservable -> throwableObservable.flatMap(
throwable -> {
if (throwable instanceof UnauthorizedException) {
return mRequestManager.getTokenObservable(AutoAtendimentoApplication.getContext())
.doOnNext(response -> /* log stuff */)
.flatMap((Function<AuthResponse, ObservableSource<?>>) response2 ->
getListarEstabelecimentoObservable()
.doOnNext(estabelecimento ->
/* log stuff */)
)
);
}
return Observable.error(throwable);
}));
}
Run Code Online (Sandbox Code Playgroud)
NetWorkErrorHandler:
public <T> T processError(Response<T> response ) {
switch (response.code()) {
case 401:
throw new UnauthorizedException();
default:
return response.body();
}
}
Run Code Online (Sandbox Code Playgroud)
令牌:
private Observable<AuthResponse> getToken(Context context,
@GrantType.GrantTypeDef String grantType, @Nullable String refreshToken) {
SessionManager sessionManager …Run Code Online (Sandbox Code Playgroud)