HTC One将EditText填充设置为0

时间:2015-02-18 01:38:59

标签: android android-layout

正如问题所述,我遇到了一些奇怪的行为,我的左侧抽屉在运行Android 4.4的HTC One上没有任何左侧填充。

我看到的布局是

<LinearLayout>

   <include layout="@layout/search_bar" />

   <!-- Some Fragment layout information -->

</LinearLayout>

在search_bar里面我有一个看起来像的布局。

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="56dp"
        style="@style/SearchBox.SingleSearchBar" />
 </FrameLayout>

SearchBox.SingleSearchBar样式看起来像(在对样式层次结构进行一些按摩之后)。

 <style name ="SearchBox.SingleSearchBar" parent="@android:style/Widget.TextView">
    <item name="android:focusable">false</item>
    <item name="android:gravity">center_vertical</item>
    <item name="android:singleLine">true</item>
    <item name="android:lines">1</item>
    <item name="android:imeOptions">actionSearch|flagNoExtractUi</item>
    <item name="android:layout_centerHorizontal">true</item>
    <item name="android:selectAllOnFocus">true</item>
    <item name="android:drawableLeft">@drawable/gray_magnifying_glass</item>
    <item name="android:scrollHorizontally">true</item>
    <item name="android:paddingLeft">@dimen/search_drawable_padding</item>
    <item name="android:paddingRight">@dimen/search_drawable_padding</item>
    <item name="android:paddingTop">@dimen/search_drawable_padding</item>
    <item name="android:paddingBottom">@dimen/search_drawable_padding</item>
    <item name="android:drawablePadding">@dimen/search_drawable_padding</item>
    <item name="android:maxLines">1</item>
    <item name="android:background">@drawable/search_bar_selector</item>
    <item name="android:textAppearance">@style/TextAppearanceSearchBox</item>
    <item name="android:textCursorDrawable">@drawable/search_box_cursor</item>
</style>

在我见过的除HTC One之外的每台设备上,运行正常:左侧drawable在左侧的search_drawable_padding中填充,并且drawable和text之间有适当的填充。但是,出于某种原因,在HTC One上,文本框的左边缘与可绘制文件之间没有填充。

我记录了getPaddingLeft()和getPaddingTop的值,发现在HTC One上它们是0px,而在三星GS4上它们是48像素,这是有意义的,因为search_drawable_padding是16dips。

这有什么办法吗?我错过了一些非常愚蠢的东西,迫使我在代码中调用setPadding以使其工作吗?

1 个答案:

答案 0 :(得分:0)

请检查您的背景drawable search_bar_selector,

<item name="android:background">@drawable/search_bar_selector</item>

设置背景可以将填充值重置为0(请参阅here)。

解决此问题的一个解决方案是在文件search_bar_selector中再次设置填充值,(良好的解决方案,因为您不需要以编程方式设置填充值)。

<padding android:bottom="@dimen/search_drawable_padding" android:left="@dimen/search_drawable_padding" android:right="@dimen/search_drawable_padding" android:top="@dimen/search_drawable_padding" />