web-dev-qa-db-ja.com

seekbar-bar-thumb-centering-issuesの修正方法

シークバーの親指画像を設定しましたが、親指はシークバーの少し下に見えます。シークバーの適切な位置に親指を設定する方法。添付画像をご覧くださいenter image description here

<SeekBar Android:id="@+id/PP_Player_SeekBar" 
         Android:thumb="@drawable/music_player_playerhead"
         Android:paddingLeft="8dip"
         Android:paddingRight="8dip"                 
         Android:progressDrawable="@drawable/seekbar_drawable_xml_background"
         Android:layout_width="236dip"
         Android:layout_centerHorizontal="true"
         Android:layout_height="wrap_content"
         Android:layout_marginTop="47dip"></SeekBar>

おかげでSunil Kumar Saoo

40
user831722

MinHeightとmaxHeightをシークバーの高さと同じに設定します。例えば

<SeekBar 
    Android:id="@+id/PP_Player_SeekBar"  
    Android:thumb="@drawable/music_player_playerhead"
    Android:paddingLeft="8dip"   
    Android:paddingRight="8dip"                 
    Android:progressDrawable="@drawable/seekbar_drawable_xml_background"
    Android:layout_width="236dip" 
    Android:layout_centerHorizontal="true"
    Android:layout_height="wrap_content" 
    Android:layout_marginTop="47dip"
    Android:minHeight="11dip"
    Android:maxHeight="11dip" />

次のURLを参照してください http://qtcstation.com/2011/05/Android-how-to-fix-seekbar-bar-thumb-centering-issues/

64

実際、maxHeightを1000dpのような大きな数に定義するだけで十分です。

これには、height=wrap_contentおよびheight=match_parent

22
peter.bartos

私にとって、この問題は、背景の垂直方向の中央揃え(トラック描画可能)に関連しています。 Android開発者およびその他のStackOverflowエントリが示唆するように、これは私が最初に使用した(問題を生成した)欠陥のあるドロアブルコードです。

<item
    Android:id="@Android:id/background"
    Android:drawable="@drawable/seekbar_track"/>
<item Android:id="@Android:id/secondaryProgress">
    <scale
        Android:drawable="@drawable/seekbar_progress2"
        Android:scaleWidth="100%" />
</item>
<item Android:id="@Android:id/progress">
    <scale
        Android:drawable="@drawable/seekbar_progress"
        Android:scaleWidth="100%" />
</item>

ここでの問題は、SeekBarの背景に関連する最初の項目です。多くのエントリは、thumbとそのトラックの間の垂直方向の空間的な切断を回避するために、layout_minHeight機能を大きな値に設定するように指示します。これは私にとっては解決策ではありませんでした-タブレットで見たとき、背景はまだ小さい電話ベースのサイズに描画されていたので、トラックは一貫してSeekBarトラックの中心よりもずっと上に配置されました。解決策は、SeekBarドロアブルのこのエントリを削除することです。したがって、次のようになります。

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <item Android:id="@Android:id/secondaryProgress">
        <scale
            Android:drawable="@drawable/seekbar_progress2"
            Android:scaleWidth="100%" />
    </item>
    <item Android:id="@Android:id/progress">
        <scale
            Android:drawable="@drawable/seekbar_progress"
            Android:scaleWidth="100%" />
    </item>

</layer-list>

次に、SeekBarのスタイル定義で、layout_backgroundをドローアブルトラックに設定します。私のものは次のようになります。

<style name="styleSeekBar" parent="@Android:style/Widget.SeekBar">
    <item name="Android:padding">@dimen/base_0dp</item>
    <item name="Android:background">@drawable/seekbar_track</item>
    <item name="Android:progressDrawable">@drawable/abratingbar</item>
    <item name="Android:minHeight">@dimen/base_29dp</item>
    <item name="Android:maxHeight">@dimen/base_29dp</item>
    <item name="Android:layout_marginLeft">@dimen/base_10dp</item>
    <item name="Android:layout_marginRight">@dimen/base_10dp</item>
    <item name="Android:layout_marginTop">@dimen/base_10dp</item>
    <item name="Android:layout_marginBottom">@dimen/base_10dp</item>
    <item name="Android:scaleType">fitXY</item>
</style>

(以前、ここでの背景設定は単なる色[白]でした。).

これは私のレイアウトのエントリで、スタイルとドロウアブルの両方を使用しています:

<SeekBar
    Android:id="@+id/seekbar_page_number"
    style="@style/styleSeekBar"
    Android:layout_width="match_parent"
    Android:layout_height="@dimen/base_29dp"
    Android:minHeight="@dimen/base_29dp"
    Android:maxHeight="@dimen/base_29dp"
    Android:layout_marginLeft="@dimen/base_230dp"
    Android:layout_gravity="bottom|right"
    Android:progress="1"
    Android:max="20"
    Android:progressDrawable="@drawable/abseekbar"
    Android:thumb="@drawable/abseekbar_thumb"/>

したがって、要約すると、カスタムSeekBarのドロアブルで背景(トラック)機能を設定しないで、カスタムSeekBarスタイルのlayout_background機能で設定してください。これにより、トラックは常に水平SeekBarの垂直方向の中央に配置されます。

5
Epsilon3

layout_heightシークバーのwrap_content の代わりに match_parent

0
Damian v d berg