Как сделать овальную форму tabhost в android

Я попытался сделать овальную форму табуса, как ожидалось ниже.

Введите описание изображения здесь

Я попробовал следующие коды.

public class AndroidTabLayoutActivity extends TabActivity { TabHost tabHost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tabHost = getTabHost(); TabHost.TabSpec spec; Intent intent; intent = new Intent().setClass(this, PhotosActivity.class); View tabView = createTabView(this, "Updates"); spec = tabHost.newTabSpec("tab1").setIndicator(tabView).setContent(intent); tabHost.addTab(spec); tabView = createTabView(this, "Events"); intent = new Intent().setClass(this, SongsActivity.class); spec = tabHost.newTabSpec("tab2").setIndicator(tabView) .setContent(intent); tabHost.addTab(spec); TabWidget tabWidget = (TabWidget) findViewById(android.R.id.tabs); final int tabChildrenCount = tabWidget.getChildCount(); View currentView; for (int i = 0; i < tabChildrenCount; i++) { currentView = tabWidget.getChildAt(0); LinearLayout.LayoutParams currentLayout = (LinearLayout.LayoutParams) currentView.getLayoutParams(); currentLayout.setMargins(0, 0, 16, 0); } tabWidget.requestLayout(); tabHost.getTabWidget().setDividerDrawable(null); } private static View createTabView(Context context, String tabText) { View view = LayoutInflater.from(context).inflate(R.layout.custom_tab, null, false); TextView tv = (TextView) view.findViewById(R.id.tabTitleText); tv.setText(tabText); return view; } } 

main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#2CA0E6"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="20dp" android:layout_marginTop="30dp" android:paddingLeft="20dp" android:paddingRight="20dp"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="2dp"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingTop="5dp"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="70dp" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> </TabHost> </LinearLayout> 

custom_tab.xml

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabTitleText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:clickable="true" android:padding="5dp" android:textSize="15sp" android:textStyle="bold" android:layout_gravity="center" android:ellipsize="marquee" android:singleLine="true" android:textColor="@color/tab_textcolor" android:background="@drawable/tab_selector"/> 

Я получил результат, как показано ниже. Введите описание изображения здесь

Может ли кто-нибудь помочь, как это сделать. благодаря

Ну, это образ. Все, что вам нужно сделать, – это готовые изображения и установить их на выбранную вкладку. Вот так!

Ну, у меня нет этого изображения, поэтому я использовал ниже изображения ( selected.png , not_selected.png ), чтобы показать, как он работает, но они не хорошо разработаны;)

Введите описание изображения здесь Введите описание изображения здесь

Ps currentLayout.setMargins(0, 0, this_should_be_zero, 0); И ваши изображения должны иметь эти поля (независимо от ожидаемого разрыва), иначе будет разрыв между двумя изображениями. Кроме того, вы можете использовать селектор (тот же png с другим цветом), чтобы отобразить выбранный.

Кажется, вы пытаетесь выяснить программный способ попробовать обходной путь с классом Paint, если у вас есть дополнительное время и усилия, если вы используете фигуры, будет сложно определить точное представление, так как это сложно, вы можете увидеть вкладку A view и B Не то же самое, использование изображения будет самым простым

И в вашем custom_tab.xml наборе

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabTitleText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:clickable="true" android:padding="5dp" android:textSize="15sp" android:textStyle="bold" android:layout_gravity="center" android:ellipsize="marquee" android:MaxLines="1" // you can use this instead of android:singleLine="true" android:textColor="@color/black" android:background="@drawable/tab_button_effect"/> // here set selector 

tab_button_effect.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/not_selected" android:state_selected="true"></item> <item android:drawable="@drawable/selected"></item> </selector> 

Попробуйте это в своем xml.и используйте в качестве вкладки.

  <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:bottomLeftRadius="30dp" android:bottomRightRadius="30dp" android:radius="60dp" android:topLeftRadius="30dp" android:topRightRadius="30dp" /> <solid android:color="#CFCFCF" /> <padding android:bottom="0dp" android:left="0dp" android:right="0dp" android:top="0dp" /> <size android:height="60dp" android:width="270dp" /> </shape> 

Вы можете сделать овальные вкладки, используя drawables в tabhost. Пожалуйста, найдите фрагменты кода ниже

 tabHost.newTabSpec("tab1").setIndicator(getCustomLayout()).setContent(intent); 

Private static View getCustomLayout (контекст контекста, строка tabText) {View view = LayoutInflater.from (контекст) .inflate (R.drawable.custom_tab, null, false); Возврат; }

заказ tab.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <stroke android:width="1dp" android:color="#000000"/> <corners android:radius="2dp"/> </shape> 1 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <stroke android:width="1dp" android:color="#000000"/> <corners android:radius="2dp"/> </shape> 

Я думаю, что самый простой способ добиться этого взгляда – создать 3 разделителя для разделителей: 1. Левая вкладка сфокусирована (белая), справа не сфокусирована (синяя) 2. Правая сфокусированная (белая), слева не сфокусированная (синяя) 3. оба Не сфокусированный (синий)

После того, как одна из вкладок будет сфокусирована, вы просто измените ее левый и правый разделитель (если существует) на сфокусированный.

Я бы опубликовал его как комментарий, но моя репутация слишком низкая, но для комментариев …

Создайте свой собственный xml-файл фона и добавьте его и попробуйте установить дополнение с этим, поэтому вам не нужно использовать изображение, иначе

Intereting Posts
Как воспроизвести видеоролики YouTube в приложении для Android, если у пользователя нет приложения YouTube? Duplicate entry: com / android / volley / AuthFailureError.class при компиляции проекта в студии android Одно и то же имя атрибута Android в двух библиотеках, имя столбца Откройте приложение Android, отправив текстовое сообщение? Классы Java по сравнению с классами C ++ CollapsingToolbarLayout не отображает заголовок React Native <Изображение> не загружает изображение из sdcard в android Android: изменение размера предварительного просмотра камеры на экране Установка разделителя между пунктами в меню опций Как использовать FirebaseInstanceId.getInstance (). DeleteInstanceId ()? Java.lang.NoClassDefFoundError: com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential C ++, OpenCV и «что» для кросс-платформенного программирования графического процессора Новый тип учетной записи Android без аутентификации Уведомления GCM push не поступают через прокси-сервер Интеграция с SDK для Facebook с Android Studio