我需要为我的标签使用自定义视图,问题是fill_parent不起作用(如here所示)。
所以我需要使用边距和内容,但为了让视图在所有配置(横向/纵向,或平板电脑中标签的高度都会发生变化)的标签内居中,这样做有点棘手
我不知道每个配置使用什么值。另外,我找不到系统用来开始的默认布局。
答案 0 :(得分:5)
我建议你使用ActionBar标签样式。这很简洁。例如(在TabView上调零):
<style name="MyActionBar" parent="@style/android:Widget.Holo.ActionBar">
<item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
<item name="android:attr/actionBarTabTextStyle">@style/MyActionBarTabText</item>
<item name="android:attr/actionBarTabStyle">@style/MyActionBarTabStyle</item>
</style>
<!-- styling for the tabs -->
<style name="MyActionBarTabStyle" parent="@style/android:Widget.Holo.Light.ActionBar.TabView">
<item name="android:background">@drawable/tab_bar_bg_master</item>
<item name="android:gravity">center</item>
</style>
(我还会注意到,通过使用自定义Drawables,这些选项卡是高度可定制的。但这是另一天的主题!)
答案 1 :(得分:1)
所以,如果你想这样做,你需要做一些肮脏的事情。 由于fill_parent不起作用,您需要强制根视图的高度高于制表符高度,然后将您真正需要的内容居中。所以我的第一个LinearLayout是无用的,第二个将位于选项卡的中心。
这是我使用的。我只想要一个textview和另一个textview在它的右上角。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="invisible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:id="@+id/tv_tab_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/tv_tab_title"
android:layout_gravity="right"
android:background="@drawable/bg_notification"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:text="1"
android:gravity="center"
android:minWidth="14dp"
android:textStyle="bold"
android:textColor="@color/blanc"
android:textSize="8dp" />
<TextView
android:id="@+id/tv_tab_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textColor="@color/noire"
android:textSize="12dp"
android:textStyle="bold" />
<TextView //this has the same height as the `tv_tab_count` so it remains centered vertically
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/tv_tab_title"
android:layout_gravity="right"
android:background="#0f0"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:text="1"
android:textSize="8dp"
android:visibility="invisible" />
</LinearLayout>
这项工作用于垂直对齐,但视图只有我在textview中放置的内容的宽度。因此,如果您需要使用完整的宽度,则应在其中一个不可见的文本视图中添加一个非常长的单词。
答案 2 :(得分:1)
同样,我们的想法是强迫你的视图比标签本身高很多。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="3dp"
android:paddingBottom="3dp">
<View
android:id="@+id/spacer_1"
android:layout_width="0dp"
android:layout_height="1000dp"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_tabicon_1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:layout_gravity="center_vertical"
android:textColor="?accentColor"
android:text="My Albums" />
<View
android:id="@+id/spacer_2"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
存在 spacer_1 和 spacer_2 视图,以便在左侧和右侧均匀填充ImageView和TextView 。此外, spacer_1 的高度设置为荒谬的高(1000dp),因此强制父视图过高。然后,ImageView和TextView都设置为 center_vertical 。