Вкладки вкладки вкладки Android с круглыми углами

141
15

Этот тип Вопроса уже задавался ранее, но не нашел правильного, рабочего решения, поэтому я снова отправляю этот вопрос. Извините, что спросил снова и потратил ваше время. Пожалуйста, дайте какое-нибудь рабочее решение. Или дайте мне знать, если я делаю что-то не так. Заранее спасибо.

Ожидаемые вкладки: On select of Tab it should come like this

Но вот так:

Предстоящие вкладки Coming Tabs

На странице "Загрузка" вкладки выглядят как изображение "Ожидаемые вкладки", но после выбора появляются как "приходящие вкладки". MainXML код:

 <android.support.design.widget.TabLayout
android:id="@+id/tabs"
style="@style/MyCustomTabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_img_jpeg"
android:minHeight="10dp"
android:padding="10dp"
app:tabGravity="fill"
app:tabIndicatorColor="@color/TRANSPARENT"
app:tabMode="fixed"
app:tabTextColor="@color/blue" />

@стиль/MyCustomTabLayout

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
<item name="tabBackground">@drawable/tab_bg</item>
</style>

@вытяжка /tab_bg

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/tab_bgselected" />
<item android:drawable="@drawable/tab_bgnotselected" />
</selector>

@вытяжка /tab_bgselected

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:bottom="0dp" android:top="0dp"
android:left="0dp" android:right="0dp" >
<shape android:shape="rectangle">
<solid android:color="@color/blue" />
<corners
android:topLeftRadius="10dp"
android:bottomLeftRadius="10dp">
</corners>
</shape>
</item>
</layer-list>

Как этот @drawable/tab_bgnotselected

И в коде позади я написал:

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
try {
mViewPager.setCurrentItem(tab.getPosition());
TabPosition = tab.getPosition();
TabCount = tabLayout.getTabCount();

try {
if (TabPosition == 0) {
GradientDrawable drawable = (GradientDrawable) getResources().getDrawable(R.drawable.policy_tab_blue);
drawable.setCornerRadii(new float[]{10,10,0,0,0,0,10,10}); // this will create the corner radious to left side

} else {
GradientDrawable drawable = (GradientDrawable) getResources().getDrawable(R.drawable.policy_tab_white);
drawable.setCornerRadii(new float[]{0,0,10,10,10,10,0,0}); // this will create the corner radious to right side

}
} catch (Exception e) {
e.printStackTrace();
}
Log.i("TabPosition:--->", TabPosition + "");
Log.i("TabCount:--->", TabCount + "");

} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {
try {

} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
});

спросил(а) 2021-01-19T16:42:40+03:00 6 месяцев, 1 неделя назад
1
Решение
101

Результат приведенного ниже кода:

enter image description here

Используйте 4 фигуры (без необходимости выбора), как:

tab_left_select.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape android:shape="rectangle">
<solid android:color="@color/blue" />
<corners
android:topLeftRadius="8dp"
android:bottomLeftRadius="8dp">
</corners>
</shape>
</item>

tab_left_unselect.xml

    То же, что и выше, просто измените цвет.

tab_right_select.xml

    То же, что и выше, просто измените направление радиуса вправо.

tab_right_unselect.xml

    Как и выше, просто измените цвет и направление радиуса вправо.

В вашем макете:

<android.support.design.widget.TabLayout
android:layout_margin="@dimen/activity_vertical_margin"
android:id="@+id/tabs"
app:tabTextColor="@color/white"
app:tabSelectedTextColor="@color/white"
app:tabIndicatorColor="#00000000"
android:layout_width="match_parent"
android:layout_height="40dp" />

В вашей деятельности/фрагмент:

tabLayout = (TabLayout)view.findViewById(R.id.tabs);
tabLayout.addTab(tabLayout.newTab().setText("Tab1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab2"));
setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if(tabLayout.getSelectedTabPosition()==0) {
setTabBG(R.drawable.tab_left_select,R.drawable.tab_right_unselect);
}
else {
setTabBG(R.drawable.tab_left_unselect,R.drawable.tab_right_select);
}
}
....
});

private void setTabBG(int tab1, int tab2){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
ViewGroup tabStrip = (ViewGroup) tabLayout.getChildAt(0);
View tabView1 = tabStrip.getChildAt(0);
View tabView2 = tabStrip.getChildAt(1);
if (tabView1 != null) {
int paddingStart = tabView1.getPaddingStart();
int paddingTop = tabView1.getPaddingTop();
int paddingEnd = tabView1.getPaddingEnd();
int paddingBottom = tabView1.getPaddingBottom();
ViewCompat.setBackground(tabView1, AppCompatResources.getDrawable(tabView1.getContext(), tab1));
ViewCompat.setPaddingRelative(tabView1, paddingStart, paddingTop, paddingEnd, paddingBottom);
}

if (tabView2 != null) {
int paddingStart = tabView2.getPaddingStart();
int paddingTop = tabView2.getPaddingTop();
int paddingEnd = tabView2.getPaddingEnd();
int paddingBottom = tabView2.getPaddingBottom();
ViewCompat.setBackground(tabView2, AppCompatResources.getDrawable(tabView2.getContext(), tab2));
ViewCompat.setPaddingRelative(tabView2, paddingStart, paddingTop, paddingEnd, paddingBottom);
}
}
}

ответил(а) 2021-01-19T16:42:40+03:00 6 месяцев, 1 неделя назад
77

Я думаю, вы должны использовать 4 формы: 1), если левая кнопка не выбрана 2) для выбранной левой кнопки 3) для выбора правой кнопки 4) для выбранной кнопки


И затем напишите селектор, чтобы использовать для фона кнопки, см. пример левой кнопки (для правой только аналогичной):


<selector
xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_selected="true">
<shape android:shape="rectangle">
<corners
android:topRightRadius="10dp"
android:bottomLeftRadius="10dp"/>
<gradient
android:startColor="#000"
android:endColor="#000"
android:gradientRadius="400"
android:angle="-270"/>
</shape>
</item>

<item>
<shape android:shape="rectangle">
<gradient
android:angle="90"
android:startColor="#880f0f10"
android:centerColor="#8858585a"
android:endColor="#88a9a9a9"/>
<corners
android:topRightRadius="10dp"
android:bottomLeftRadius="10dp"/>
</shape>
</item>


Подробнее см. здесь. Закругленные углы для TABS в андроиде

ответил(а) 2021-01-19T16:42:40+03:00 6 месяцев, 1 неделя назад
45

Я думаю, вы должны использовать для всех углов


 <?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#SomeGradientBeginColor"
android:endColor="#SomeGradientEndColor"
android:angle="270"/>

<corners
android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>


проверить, как использовать это в кнопке или макете


http://www.techamongus.com/2017/02/android-layouts-with-round-corners.html

ответил(а) 2021-01-19T16:42:40+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема