【问题标题】:android drawable selector compatibility issueandroid可绘制选择器兼容性问题
【发布时间】:2015-06-14 04:59:38
【问题描述】:

我有一个按钮,其背景设置为可绘制选择器。

button_sign_in_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/button_sign_in_background_selected" android:state_focused="true" />
<item android:drawable="@drawable/button_sign_in_background_selected" android:state_pressed="true" />
<item android:drawable="@drawable/button_sign_in_background_selected" android:state_selected="true" />
<item android:drawable="@drawable/button_sign_in_background_normal" />

</selector>

button_sign_in_background_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:visible="true">

<corners android:radius="@dimen/abc_control_corner_material" />
<solid android:color="@color/color_primary" />
</shape>

button_sign_background_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<corners android:radius="@dimen/abc_control_corner_material" />
<solid android:color="@color/color_primary_dark" />
</shape>

我在两种不同的设备上进行了测试,一种使用 API 21,另一种是 API 10。背景button_sign_in_background.xml 在 API 10 中无法显示,但在 API 21 设备中可以使用。

如果我直接在button_sign_in_background.xml 中使用颜色,如下所示,两种设备都可以工作。但这不是我需要的效果,我想要的是按钮周围有一个小半径的角。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@color/color_primary_dark" android:state_focused="true" />
<item android:drawable="@color/color_primary_dark" android:state_pressed="true" />
<item android:drawable="@color/color_primary_dark" android:state_selected="true" />
<item android:drawable="@color/color_primary" />

</selector>

这是旧安卓设备的兼容性问题吗?

我该如何解决?欢迎任何形式的评论和回答。

【问题讨论】:

    标签: android xml android-drawable android-compatibility


    【解决方案1】:

    我使用以下代码来解决兼容性问题。仅使用 API 级别 10 (Android 2.3.3) 进行测试。手动显示背景可绘制后,它工作正常。如果有更多版本存在此兼容性问题,欢迎评论。

        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) {
    
            mEmailSignInButton.setBackgroundDrawable(
                    getResources().getDrawable(R.drawable.button_sign_in_background));
        }
    

    【讨论】:

      【解决方案2】:

      如果你想要小半径角按钮,下面的代码从 API 10 到 Lollipop 没有问题。

      btn_done_background.xml

      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:state_pressed="false" android:drawable="@drawable/shape_round_normal"/>
          <item android:state_pressed="true" android:drawable="@drawable/shape_round_pressed"/>
      </selector>
      

      shape_round_normal.xml

      <shape xmlns:android="http://schemas.android.com/apk/res/android"
         android:shape="rectangle">
          <solid android:color="@color/color_56b8e9"/>
          <corners android:radius="4dp"/>
      </shape>
      

      shape_round_pressed.xml

      <shape xmlns:android="http://schemas.android.com/apk/res/android"
         android:shape="rectangle">
          <solid android:color="@color/color_3ba2e1"/>
          <corners android:radius="4dp"/>
      </shape>
      

      应用按钮

      我使用LinearLayout 作为按钮。

      <LinearLayout
                  android:layout_width="wrap_content"
                  android:layout_height="30dp"
                  android:id="@+id/linearLayoutButtonReply"
                  android:layout_centerVertical="true"
                  android:background="@drawable/btn_done_background"
                  android:clickable="true"
                  android:gravity="center_vertical"
                  android:paddingLeft="10dp"
                  android:paddingRight="10dp">
          <ImageView
                      android:layout_width="15dp"
                      android:layout_height="15dp"
                      android:id="@+id/imageViewReply"
                      android:layout_marginRight="5dp"
                      android:layout_marginEnd="5dp"
                      android:duplicateParentState="true"
                      android:src="@drawable/ic_card_btn_answer"/>
      
          <TextView
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:id="@+id/textViewReplyCount"
                      android:duplicateParentState="true"
                      android:textColor="@android:color/white"
                      android:textSize="13sp"
                      android:text="@string/ReplyEmpty"
                      />
      </LinearLayout>
      

      【讨论】:

      • 感谢您的回答。但我想直接将可绘制选择器应用于按钮的背景,而不是LinearLayout 或其他视图组。
      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多