这个问题是this的后续问题。遵循答案中的建议后,我的SeekBar
定义为:
<SeekBar
android:id="@id/seek_bar_player"
android:layout_width="match_parent"
android:layout_height="12dp"
android:layout_above="@id/player_container"
android:layout_centerVertical="true"
android:layout_marginBottom="-4.2dp"
android:maxHeight="4dp"
android:minHeight="4dp"
android:padding="0dp"
android:paddingEnd="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingStart="10dp"
android:progressDrawable="@drawable/seekbar"
android:thumb="@drawable/seekbar_thumb"
android:background="@color/colorTransparent"
/>
seekbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@android:id/background"
android:drawable="@color/seekbarBackground"/>
<item
android:id="@android:id/progress">
<scale android:drawable="@color/seekbarProgressBackground"
android:scaleWidth="100%"/>
</item>
</layer-list>
seekbar_thumb.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:dither="false">
<solid android:color="@color/seekbarProgressBackground"/>
<size
android:width="3dp"
android:height="12dp"
/>
</shape>
输出如下:
SeekBar
位于RelativeLayout
,我希望该栏位于player_container
(这是其他容器)的顶部。我现在有两个问题:
1。条形的高度(只有条形,而不是拇指或搜索条等)预计为4dp,由maxHeight
属性引起,拇指的高度为预计为12dp。因此,我希望拇指垂直居中并为底部边距给出-4dp应使条形位于player_container
之上,因为(12-4)/ 2 = 4.但是,它会产生一些差距栏和player_container
,因此我将其设置为-4.2dp(经过几次试验)以获得预期的输出。我对此并不自信,即它在某些设备上可能表现得很奇怪。这是什么原因?我们如何确保拇指垂直居中且高度为12dp?
2。栏上方的空间 - 再次预计高度为4dp-是不透明的,这样看起来非常业余。我将SeekBar
的背景设置为透明但显然不起作用。我们怎样才能让它变得透明?
编辑:现在我尝试使用API 22的Lenove Vibe C,甚至-4.2dp的底部边距还不够。 bar和player_container
之间存在差距。我害怕,它在不同的设备中表现不同。应该有办法解决它。
编辑:搜索栏所在的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp">
<TabHost
android:id="@+id/tab_host"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/seek_bar_player"
android:layout_alignParentTop="true"
android:layout_marginTop="4pt"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:showDividers="none" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</TabHost>
<LinearLayout
android:id="@+id/player_container"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:background="@color/playerBackground"
android:gravity="center"
android:orientation="horizontal"
android:padding="0dp">
<!--
Five FrameLayouts here, each containing one control button. They
are not referenced elsewhere, so omiting them. Not important.
I want the bar of the seekbar to be on top of this LinearLayout.
-->
</LinearLayout>
<SeekBar
android:id="@id/seek_bar_player"
android:layout_width="match_parent"
android:layout_height="12dp"
android:layout_above="@id/player_container"
android:layout_centerVertical="true"
android:layout_marginBottom="-4.2dp"
android:maxHeight="4dp"
android:minHeight="4dp"
android:padding="0dp"
android:paddingEnd="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingStart="10dp"
android:progressDrawable="@drawable/seekbar"
android:thumb="@drawable/seekbar_thumb"
android:background="@color/colorTransparent"
/>
</RelativeLayout>