Intereting Posts
Google Play Store дает дополнительные кредиты пользователю? Android-приложение – как отобразить список элементов и сделать их интерактивными Анонимный идентификатор пользователя Parse не сохраняется на Android Вид нижней навигации в анимации поддержки библиотеки v25.0.0? Как получить имя изображения из ресурса в Android? Как остановить ASyncTask от сбоев, когда моя деятельность изменяется или уничтожается? Android WebView предотвращает перезагрузку страницы Android-анимация на экране Как использовать два курсора и CursorJoiner в LoaderManager в android Обнаружение изменений в типе сети (TelephonyManager) в android Развернуть / открыть прядильщик при щелчке другого элемента / виджета? Запись звонков в Android Входящий голос не записывается Как выполнить синхронизацию данных между устройствами в Интернете и офлайн с помощью Google App Engine? Заставить Android-телефон спать, чтобы проверить? LocationManager слишком часто вызывает onLocationChanged?

Android удаляет пространство между вкладками в tabwidget

Я сделал приложение с вкладками, как в HelloTabActivity, есть также пространство между этими вкладками, может ли кто-нибудь предложить, как удалить это пространство, а также есть серая строка под вкладками, как это можно удалить?

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

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" > <HorizontalScrollView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollbars="none"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </HorizontalScrollView> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" /> </LinearLayout> </TabHost> </LinearLayout> 

styles.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomTheme" parent="@android:style/Theme"> <item name="android:tabWidgetStyle">@style/CustomTabWidget</item> </style> <style name="CustomTabWidget" parent="@android:style/Widget.TabWidget"> <item name="android:textAppearance">@style/CustomTabWidgetText</item> </style> <style name="CustomTabWidgetText" parent="@android:style/TextAppearance.Widget.TabWidget"> <item name="android:textSize">10sp</item> <item name="android:textStyle">bold</item> <item name="android:textColor">#1589FF</item> <item name="android:padding">3dip</item> </style> </resources> 

Мероприятия

 public class InfralineTabWidget extends TabActivity{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Resources res = getResources(); // Resource object to get Drawables TabHost tabHost = (TabHost)getTabHost(); // The activity TabHost TabHost.TabSpec spec; // Resusable TabSpec for each tab Intent intent; // Reusable Intent for each tab // Create an Intent to launch an Activity for the tab (to be reused) intent = new Intent().setClass(this, TopNewsActivity.class); // Initialize a TabSpec for each tab and add it to the TabHost spec = tabHost.newTabSpec("topNews").setIndicator("Top News", res.getDrawable(R.drawable.tab_news)).setContent(intent); tabHost.addTab(spec); // Do the same for the other tabs intent = new Intent().setClass(this, PowerActivity.class); spec = tabHost.newTabSpec("power").setIndicator("Power", res.getDrawable(R.drawable.tab_power)).setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, EnergyActivity.class); spec = tabHost.newTabSpec("energy").setIndicator("Renewable Energy", res.getDrawable(R.drawable.tab_energy)).setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, CoalActivity.class); spec = tabHost.newTabSpec("coal").setIndicator("Coal", res.getDrawable(R.drawable.tab_coal)).setContent(intent); tabHost.addTab(spec); intent = new Intent().setClass(this, OilnGasActivity.class); spec = tabHost.newTabSpec("oilnGas").setIndicator("Oil & Gas", res.getDrawable(R.drawable.tab_oilngas)).setContent(intent); tabHost.addTab(spec); tabHost.setCurrentTab(0); tabHost.getTabWidget().getChildAt(0).setLayoutParams(new LinearLayout.LayoutParams(100,25)); tabHost.getTabWidget().getChildAt(1).setLayoutParams(new LinearLayout.LayoutParams(100,25)); tabHost.getTabWidget().getChildAt(2).setLayoutParams(new LinearLayout.LayoutParams(100,25)); tabHost.getTabWidget().getChildAt(3).setLayoutParams(new LinearLayout.LayoutParams(100,25)); tabHost.getTabWidget().getChildAt(4).setLayoutParams(new LinearLayout.LayoutParams(100,25)); } } 

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

благодаря

Для удаления серой линии в нижней части вкладки вы можете установить

 tabHost.getTabWidget().setStripEnabled(false); 

Из-за устранения зазора между вкладками. Лучшим способом было бы использовать собственный вытаскиваемый без каких-либо прокладок. Вы можете использовать изображения для этого, или вы можете создавать фоны ваших вкладок через xml, например внутри корневого элемента <layer_list> :

 <layer_list> <item android:top="0dp" android:left="0dp" android:right="0dp" android:bottom="0dp"> <shape android:shape="rectangle"> [..] </shape> </item> [..] </layer_list> 

И установите этот шаблон для фона TabWidget .

Чтобы узнать, как настроить вкладки, в Интернете есть много учебников. Например, этот Джош короток и имеет приятное объяснение.

Обновить

Здесь я разделяю небольшую выборку tabwidget с помощью пользовательских вкладок (на основе вашего кода) для достижения следующего результата:

Пользовательские вкладки

Что вам нужно:

  1. Три новых слоя (для выбранных, сфокусированных и невыбранных состояний вкладок)
  2. Два состояния (для текста и фона разных состояний)
  3. Новый макет для вкладок
  4. main.xml свой main.xml
  5. Обновить свой класс активности
  6. Обновите свой androidManifest.xml (удалите объявления стилей)

Три слоя tab_normal.xml : tab_normal.xml , tab_focused.xml , tab_selected.xml
Drawable / tab_normal.xml :

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/default_back_color" /> </shape> </item> <item android:top="2dp"> <shape android:shape="rectangle"> <gradient android:startColor="#AAAAAA" android:centerColor="#888888" android:endColor="#666666" android:angle="90" /> <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" android:topLeftRadius="10dp" android:topRightRadius="10dp" /> </shape> </item> <item android:top="4dp" android:left="1dp" android:right="1dp" android:bottom="0dp"> <shape android:shape="rectangle"> <solid android:color="@color/default_back_color" /> <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" /> </shape> </item> </layer-list> 

Drawable / tab_focused.xml :

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/default_back_color" /> </shape> </item> <item android:top="2dp"> <shape android:shape="rectangle"> <gradient android:startColor="#AAAAAA" android:centerColor="#888888" android:endColor="#666666" android:angle="90" /> <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" android:topLeftRadius="10dp" android:topRightRadius="10dp" /> </shape> </item> <item android:top="4dp" android:left="1dp" android:right="1dp" android:bottom="0dp"> <shape android:shape="rectangle"> <gradient android:startColor="#8F8F8F" android:centerColor="#656565" android:endColor="#3F3F3F" android:angle="90" /> <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" /> </shape> </item> </layer-list> 

Drawable / tab_selected.xml :

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/default_back_color" /> </shape> </item> <item android:top="2dp"> <shape android:shape="rectangle"> <gradient android:startColor="#EEEEEE" android:centerColor="#CCCCCC" android:endColor="#AAAAAA" android:angle="-90" /> <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" android:topLeftRadius="10dp" android:topRightRadius="10dp" /> </shape> </item> <item android:top="4dp" android:left="1dp" android:right="1dp" android:bottom="0dp"> <shape android:shape="rectangle"> <gradient android:startColor="#EAEAEA" android:centerColor="#9F9F9F" android:endColor="#696969" android:angle="90" /> <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="0dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" /> </shape> </item> </layer-list> 

tab_background_selector.xml два состояния: tab_background_selector.xml , tab_text_selector.xml
Drawable / tab_background_selector.xml :

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/tab_selected"/> <item android:state_selected="false" android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/tab_normal" /> <item android:state_pressed="true" android:drawable="@drawable/tab_focused"/> <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected"/> </selector> 

Drawable / tab_text_selector.xml :

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="#1589FF" /> <item android:state_focused="true" android:color="#1589FF" /> <item android:state_pressed="true" android:color="@android:color/white" /> <item android:color="#F0F0F0" /> </selector> 

Новый макет для вкладок: tab.xml
макет / tab.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="@drawable/tab_background_selector" android:gravity="center" android:orientation="vertical" android:padding="5dp"> <ImageView android:id="@+id/tab_icon" android:layout_width="30dp" android:layout_height="30dp" android:scaleType="fitCenter" /> <TextView android:id="@+id/tab_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textStyle="bold" android:gravity="center_horizontal" android:textSize="10sp" android:padding="3dip" android:ellipsize="marquee" android:textColor="@drawable/tab_text_selector" /> </LinearLayout> 

Main.xml :

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <HorizontalScrollView android:scrollbars="none" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </HorizontalScrollView> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp" /> </LinearLayout> </TabHost> </LinearLayout> 

InfralineTabWidget.java :

 public class InfralineTabWidget extends TabActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TabHost tabHost = (TabHost) getTabHost(); tabHost.addTab(createTab(TopNewsActivity.class, "topNews", "Top News", R.drawable.tab_news)); tabHost.addTab(createTab(PowerActivity.class, "power", "Power", R.drawable.tab_power)); tabHost.addTab(createTab(EnergyActivity.class, "energy", "Renewable Energy", R.drawable.tab_energy)); tabHost.addTab(createTab(CoalActivity.class, "coal", "Coal", R.drawable.tab_coal)); tabHost.addTab(createTab(OilnGasActivity.class, "oilnGas", "Oil & Gas", R.drawable.tab_oilngas)); tabHost.setCurrentTab(0); tabHost.getTabWidget().getChildAt(0).getLayoutParams().width = 140; tabHost.getTabWidget().getChildAt(1).getLayoutParams().width = 140; tabHost.getTabWidget().getChildAt(2).getLayoutParams().width = 140; tabHost.getTabWidget().getChildAt(3).getLayoutParams().width = 140; tabHost.getTabWidget().getChildAt(4).getLayoutParams().width = 140; } private TabSpec createTab(final Class<?> intentClass, final String tag, final String title, final int drawable) { final Intent intent = new Intent().setClass(this, intentClass); final View tab = LayoutInflater.from(getTabHost().getContext()). inflate(R.layout.tab, null); ((TextView)tab.findViewById(R.id.tab_text)).setText(title); ((ImageView)tab.findViewById(R.id.tab_icon)).setImageResource(drawable); return getTabHost().newTabSpec(tag).setIndicator(tab).setContent(intent); } } 

И это все.
Чтобы создать прямые угловые вкладки, просто теряйте спецификации угла из выгружаемых xml-файлов.
Также играйте вокруг цветов, штрихов и т. Д., Чтобы результат соответствовал вашим предпочтениям.

Use android: showDividers = "none" в макете xml.

 <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:showDividers="none" android:layout_height="wrap_content"/> 

Если ваша цель сборки – Honeycomb, вы можете использовать следующий код.

 if (Integer.parseInt(Build.VERSION.SDK) >= Build.VERSION_CODES.HONEYCOMB) { tabHost.getTabWidget().setShowDividers(LinearLayout.SHOW_DIVIDER_NONE); } 

Чтобы удалить избыточный промежуток между вкладками, можно установить для параметра measureWithLargestChild атрибут tabwidget значение false

 <TabWidget android:id="@android:id/tabs" android:layout_width="wrap_content" android:layout_height="wrap_content" android:measureWithLargestChild="false"> </TabWidget> 

Одна волшебная линия.

 mTabHost.getTabWidget().setDividerDrawable(null); 

Готово