我很难为动作栏实现自定义样式标签:我需要制作标签(我的意思是按钮),为正常状态和选定状态使用自定义图形。
我已经能够使用
杀死所有本机样式<style name="customActionBarTabStyle">
<item name="android:background">#00000000</item>
</style>
然后使用Tab.setIcon()使标签看起来像我需要的方式,但我需要它们对切换做出反应(通过在两个Drawable之间切换 - 用于开启和关闭状态)。
我尝试过像这样创建一个Drawable选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/btn_on" />
<item android:drawable="@drawable/btn_off" />
</selector>
但选中时标签不会切换到按下模式。
另外,我尝试在TabListener.onTabSelected()和.onTabUnselected()中调用Tab.setIcon() - 也没有运气。
有没有人知道这个问题的好方法?
另外,我需要显示一个自定义视图而不是溢出菜单 - 我已经搜索了一堆“提示”来重新思考我的UI“按照Android方式”但问题是UI不是实际的重新思考 - 这是客户的:)所以我真的想找到一种方法来解决ActionBar的定制缺点。
任何建议都非常感谢,提前谢谢。
答案 0 :(得分:1)
尝试使用state_selected而不是state_pressed,只是尝试在此处执行类似的操作(完全更改选项卡的背景图像),似乎操作栏选项卡只输入选定的true / false但不是按下状态...
编辑:似乎背景属性进入该状态,但不是选项卡上使用的文字颜色......
答案 1 :(得分:0)
我认为你必须使用 android:selectableItemBackground 看看this 它可能有所帮助。
祝你好运答案 2 :(得分:0)
只是为了使解决方案更具现实性:
@ taf表示解决方案:您需要在父级布局中设置android:duplicateParentState="true"
,将其用作标签的自定义视图。
答案 3 :(得分:0)
选择选项卡时,我的代码和图标会发生变化,未选中时会更改。
public class MainActivity extends FragmentActivity implements ActionBar.TabListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_main);
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setBackgroundDrawable(null);
icons = new int[] {
R.drawable.ic_facebook,
R.drawable.ic_facebook,
R.drawable.ic_facebook,
R.drawable.ic_facebook,
};
icons_selected = new int[] {
R.drawable.ic_launcher,
R.drawable.ic_launcher,
R.drawable.ic_launcher,
R.drawable.ic_launcher,
};
// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
// Create a tab with text corresponding to the page title defined by
// the adapter. Also specify this Activity object, which implements
// the TabListener interface, as the callback (listener) for when
// this tab is selected.
actionBar.addTab(
actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(i))
.setIcon(icons[i])
.setTabListener(this)
);
}
}
和这个
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction){
getActionBar().getSelectedTab().setIcon(icons_selected[tab.getPosition()]);
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
getActionBar().getSelectedTab().setIcon(icons[tab.getPosition()]);
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}