Android:在 4.2.2 及以下版本中具有内在边界的复合可绘制对象

Posted

技术标签:

【中文标题】Android:在 4.2.2 及以下版本中具有内在边界的复合可绘制对象【英文标题】:Android: Compound Drawables With Intrinsic Bounds on 4.2.2 and below 【发布时间】:2015-08-16 20:25:57 【问题描述】:

我尝试像这样使用带有左侧 Compound Drawable 的复选框:

holder.selCategoryCheckBox.setCompoundDrawablesWithIntrinsicBounds(imageResource, 0, 0, 0);

xml:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="horizontal">

<CheckBox
    android:id="@+id/category_sel_checkbox"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_toLeftOf="@+id/categorySelectionOptions"
    android:layout_toStartOf="@+id/categorySelectionOptions"
    android:drawablePadding="@dimen/more_than_big_padding"
    android:paddingLeft="@dimen/big_padding"
    android:paddingTop="@dimen/big_padding"
    android:paddingBottom="@dimen/big_padding"
    android:singleLine="true"
    android:textSize="18sp"
    android:layout_marginLeft="@dimen/five_margin"
    android:layout_marginStart="@dimen/five_margin"/>

<ImageView
    android:id="@+id/categorySelectionOptions"
    android:layout_
    android:layout_
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginLeft="@dimen/main_middle_margin"
    android:layout_marginStart="@dimen/main_middle_margin"
    android:background="@drawable/row_selector_list_dots"
    android:clickable="true"
    android:src="@drawable/ic_action_drawer_dots"
    android:contentDescription="@string/image"
    android:layout_centerVertical="true" />

在 Android 4.3 Jelly Bean and Up 上运行良好:

但在 Android 4.2 Jelly Bean 及以下版本中,间距被破坏:

一些想法,有什么问题?

【问题讨论】:

【参考方案1】:

临时解决方法:

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:gravity="center_vertical">

    <ImageView
        android:id="@+id/category_sel_icon"
        android:layout_
        android:layout_
        android:layout_marginLeft="@dimen/larger_margin"
        android:layout_marginStart="@dimen/larger_margin"/>

    <TextView
        android:id="@+id/category_sel_text"
        android:layout_
        android:layout_
        android:layout_marginLeft="@dimen/middle_margin"
        android:layout_marginStart="@dimen/middle_margin"
        android:layout_marginRight="@dimen/large_margin"
        android:layout_marginEnd="@dimen/large_margin"
        android:singleLine="true"
        android:textSize="18sp"/>
</LinearLayout>
<FrameLayout
    android:layout_
    android:layout_>

    <CheckBox
        android:id="@+id/category_sel_checkbox"
        android:layout_
        android:layout_
        android:layout_marginLeft="@dimen/five_margin"
        android:layout_marginStart="@dimen/five_margin"/>
</FrameLayout>
<FrameLayout
    android:layout_
    android:layout_>

    <ImageView
        android:id="@+id/categorySelectionOptions"
        android:layout_
        android:layout_
        android:layout_marginLeft="@dimen/main_middle_margin"
        android:layout_marginStart="@dimen/main_middle_margin"
        android:background="@drawable/row_selector_list_dots"
        android:layout_gravity="end"
        android:clickable="true"
        android:src="@drawable/ic_action_drawer_dots"
        android:contentDescription="@string/image" />
</FrameLayout>

【讨论】:

以上是关于Android:在 4.2.2 及以下版本中具有内在边界的复合可绘制对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Json 对象顺序在 android KITKAT 及以下版本中混淆?

同项目支持3.0及以下版本

Android ANR原因及解决办法

Android中使用OAID

浅谈android:taskAffinity属性及问题解决

如何获取 Android Q 及以上版本的 MUSIC 文件夹中的文件列表?