Android动作栏选项卡,将图标和文本样式一起设置

5

首先,这是我当前选项卡栏的图片 在此输入图片描述

我希望的是将图像对齐到最左边,同时保持文本居中,或将图像置于文本上方并居中。

这是我添加文本的方式:

var tab = this.ActionBar.NewTab ();            
tab.SetText (tabText);
tab.SetIcon (iconResourceId);

以下是相关的style.xml条目:

<style name="Theme.Discover" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item>
    <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
    <item name="android:actionMenuTextColor">#ffffff</item>
    <item name="android:windowBackground">@drawable/bg</item>
</style>

<style name="MyActionBarTabStyle" parent="@android:style/Widget.Holo.Light.ActionBar.TabView">
    <item name="android:background">@drawable/action_tab_selector</item>
</style> 

<!-- ActionBar tabs text styles -->
<style name="MyActionBarTabText"
       parent="@android:style/Widget.Holo.ActionBar.TabText">
    <item name="android:textColor">#ffffff</item>
</style>

我也能理解Java代码,所以如果你不熟悉Xamarin,我仍然会欣赏Java的示例和答案。

2个回答

6

我提供的解决方案不是完美的,但为了将图标移动到文本上方,以下是我目前的进展,这可能能帮助你。

TabLayout.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageView
        android:id="@+id/tab_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent" />
    <TextView
        android:id="@+id/tab_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

MainActivity.cs

 void AddTabToActionBar(int labelResourceId, int iconResourceId)
        {
            var tab = this.ActionBar.NewTab();
            tab.SetCustomView(Resource.Layout.Tablayout);
            tab.CustomView.FindViewById<ImageView>(Resource.Id.tabImage).SetImageResource(iconResourceId);
            tab.CustomView.FindViewById<TextView>(Resource.Id.tabText).SetText(labelResourceId);
            tab.TabSelected += TabOnTabSelected;
            ActionBar.AddTab(tab);

        }

这真的很有帮助。我会尝试按照自己的想法进行样式设计。 - erkinyldz
我似乎无法编辑选项卡栏的高度或宽度。我尝试将LinearLayouts的layout_height属性设置为wrap_content、100dp和150dp,但没有任何变化。有什么想法吗? - erkinyldz
我还没有尝试过,但看起来你必须更改操作栏的样式:https://dev59.com/y2DVa4cB1Zd3GeqPdXCU#10280063 - goober_nut
尝试了您提供的链接中的不同方法,但我无法更改操作栏选项卡的高度。即使我更改了选项卡的高度,也没有帮助。 - erkinyldz
说实话,我认为Android真的希望你把图标放在文本的左侧或右侧。也许新版本的API将允许在操作栏上轻松地将图标放置在文本上方。这可能是他们与iOS区分的方式。 将图标放置在最左边的一个想法是向字符串添加空格,使其对用户不可见。 - goober_nut

3

我成功地完成了它。这是我使用的xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:p1="http://schemas.android.com/apk/res/android"
    p1:minWidth="15px"
    p1:minHeight="15px"
    p1:layout_width="wrap_content"
    p1:layout_height="wrap_content"
    p1:id="@+id/tabRelative"
    p1:gravity="center">
    <ImageView
        p1:src="@drawable/discover_icon_nightlife"
        p1:layout_width="20dp"
        p1:layout_height="20dp"
        p1:id="@+id/tabImage"
        p1:layout_centerHorizontal="true"
        p1:scaleType="centerInside"
        p1:layout_marginTop="4dp"
        p1:paddingTop="1dp" />
    <TextView
        p1:text="Menu"
        p1:layout_width="wrap_content"
        p1:layout_height="wrap_content"
        p1:id="@+id/tabText"
        p1:layout_centerHorizontal="true"
        p1:layout_below="@+id/tabImage"
        p1:paddingTop="2dp" />
</RelativeLayout>

我按照goober_nuts的建议将其设置为自定义视图,并添加到我的ab中。

但是效果不如我所愿。我还想改变选项卡的高度,但一直没有成功。以下是最终效果的图片:

Last Look


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接