自定义SeekBar样式 - 透明度和大小问题

时间:2017-02-04 19:41:00

标签: android android-layout transparency seekbar

这个问题是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>

输出如下:

enter image description here

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>

0 个答案:

没有答案