如何自定义 android 选项卡或背景更改?
Posted
技术标签:
【中文标题】如何自定义 android 选项卡或背景更改?【英文标题】:How to customize android tabs or background change? 【发布时间】:2013-07-27 16:01:38 【问题描述】:我对安卓很陌生。现在我构建了一个小应用程序。
我需要在 2.2 中更改 android 默认查找的外观。因此,在这里我尝试更改选项卡的背景。你能帮我做那件事吗?
我喜欢使用 xml/style 的方式。
这就是我需要的实际输出。
【问题讨论】:
***.com/questions/2099959/… 我尝试了 selva 提供的实际链接。但得不到结果。可能是我的问题。 @SibirajPR,看这里,joshclemm.com/blog/?p=136 【参考方案1】:您的标签主机 XML 文件
TabHost
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost" android:layout_
android:layout_>
<LinearLayout android:orientation="vertical"
android:layout_ android:layout_>
<TabWidget android:id="@android:id/tabs"
android:layout_ android:layout_ />
<FrameLayout android:id="@android:id/tabcontent"
android:layout_ android:layout_>
</FrameLayout>
</LinearLayout>
</TabHost>
在您的主要活动中
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTabHost = (TabHost) findViewById(android.R.id.tabhost);
setupTab(new TextView(this), "Tab 1");
setupTab(new TextView(this), "Tab 2");
setupTab(new TextView(this), "Tab 3");
private void setupTab(final View view, final String tag)
View tabview = createTabView(mTabHost.getContext(), tag);
TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(new TabContentFactory()
public View createTabContent(String tag)
return view;
);
mTabHost.addTab(setContent);
private static View createTabView(final Context context, final String text)
View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
TextView tv = (TextView) view.findViewById(R.id.tabsText);
tv.setText(text);
return view;
CustomTabsLayout tabs_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabsLayout" android:layout_
android:layout_ android:background="@drawable/tab_bg_selector"
android:padding="10dip" android:gravity="center" android:orientation="vertical">
<TextView android:id="@+id/tabsText" android:layout_
android:layout_ android:text="Title"
android:textSize="15dip" android:textColor="@drawable/tab_text_selector" />
</LinearLayout>
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="@android:color/white" />
<item android:state_focused="true" android:color="@android:color/white" />
<item android:state_pressed="true" android:color="@android:color/white" />
<item android:color="#f8f8f8" />
</selector>
tab_bg_selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Active tab -->
<item android:state_selected="true" android:state_focused="false"
android:state_pressed="false" android:drawable="@drawable/tab_bg_selected" />
<!-- Inactive tab -->
<item android:state_selected="false" android:state_focused="false"
android:state_pressed="false" android:drawable="@drawable/tab_bg_unselected" />
<!-- Pressed tab -->
<item android:state_pressed="true" android:drawable="@android:color/transparent" />
<!-- Selected tab (using d-pad) -->
<item android:state_focused="true" android:state_selected="true"
android:state_pressed="false" android:drawable="@android:color/transparent" />
</selector>
tab_bg_selected.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:startColor="#A8A8A8" android:centerColor="#7F7F7F"
android:endColor="#696969" android:angle="-90" />
</shape>
tab_bg_unselected.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:startColor="#5C5C5C" android:centerColor="#424242"
android:endColor="#222222" android:angle="-90" />
</shape>
最后在你的主要活动类中
mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
然后完成:)
【讨论】:
感谢您这么长的回答。我会在实施后回复您。 这对您有帮助吗? :) @AbdulkadirNURKALEM 你能否指导我了解 mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider) 中的 tab_divider 是什么; 在mTabHost.addTab(setContent);
出现错误有没有人知道null pointer exception
回答 Kartheek 的问题 = 添加 mTabHost.setup();到 onCreate 方法。像这样:@Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);设置内容视图(R.layout.main); mTabHost = (TabHost) findViewById(android.R.id.tabhost); mTabHost.setup(); setupTab(new TextView(this), "Tab 1"); setupTab(new TextView(this), "Tab 2"); setupTab(new TextView(this), "Tab 3"); 以上是关于如何自定义 android 选项卡或背景更改?的主要内容,如果未能解决你的问题,请参考以下文章