android 旧设备的布局

android layout for older devices

我是 android 编程的新手,为了能够为旧的 (android 2.3.3) 设备制作应用程序,我在布局方面有点乱.我在 android 工作室的 GUI 编辑器中乱搞了很多东西,以制作(在我看来)一个非常漂亮的 GUI。然后我才注意到我在 API 23 中工作。这导致我的旧设备 (API 10) 的 GUI 完全混乱,然后我开始更改所有内容,以便它看起来至少非常适合我要为其开发的设备。

我使用了一个垂直方向的 LinearLayout,在里面放了一些 TextViews 和一个 Chronometer 以及大结局(我的问题的原因)ToggleButton 在点击时改变了颜色。我的 ToggleButton 代码如下所示:

<ToggleButton android:id="@+id/toggleButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_margin="10dip"
    android:enabled="true"

    android:background="@drawable/toggle_button"
    android:button="@android:drawable/ic_btn_speak_now"
    android:buttonTint="#FFFFFF"


    android:textAllCaps="false"
    android:textOn="@string/toggle_on"
    android:textOff="@string/toggle_off"
    android:textColor="#FFFFFF"
    android:gravity="center" />

在此代码片段中 ic_btn_speak_now 是我在系统绘图中找到的一些扬声器图标。 toggle_button 另一方面是我写的,看起来如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

        <solid android:color="@drawable/toggle_color" />
        <corners android:radius="5dip" />
</shape>

轮到 toggle_color 看起来像:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#669900"
        android:state_checked="true" />
    <item android:color="#cc0000"
        android:state_checked="false" />
</selector>

这导致这个非常漂亮的按钮非常适合 API 23,但无法用于 API 10。

我已经四处张望了很多,到处都有其他解决方案和其他原因来解释为什么某些事情不起作用。我尝试了多种方法,但没有任何效果。我什至省略了我的按钮的漂亮形状,希望我能设法实现颜色变化,但我也没能做到。

我的问题可以这样问:

  1. 为什么我的代码不适用于 API 10?
  2. 如何让我心爱的按钮为 API 10 工作?

感谢您的每一点帮助。

我不知道为什么我的代码不起作用,但我设法通过以编程方式更改形状来轻松解决它。因此,我在 res/drawable 文件夹中制作了 2 个形状(每种颜色一个),如下所示:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

        <solid android:color="#cc0000" />
        <corners android:radius="5dip" />
</shape>

这将是 red_toggle.xml 我用另一种颜色做了同样的事情来制作 green_toggle.xml。我的 ToggleButton 被更改为在单击时调用 onToggle() 方法,最终看起来像:

<ToggleButton android:id="@+id/toggleButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_margin="10dip"
    android:onClick="onToggle"

    android:padding="15dp"
    android:background="@drawable/toggle_button"
    android:button="@android:drawable/ic_btn_speak_now"
    android:buttonTint="#FFFFFF"

    android:textAllCaps="false"
    android:textOn="@string/toggle_on"
    android:textOff="@string/toggle_off"
    android:textColor="#FFFFFF"
    android:gravity="center" />

在我的 Activity 中,我有这个方法 onToggle(),它执行以下操作:

public void onToggle(View view) {
    //only togglebutton should be calling this method
    if(((ToggleButton) view).isChecked()) {
        toggle.setBackgroundResource(R.drawable.red_toggle);
    } else {
        toggle.setBackgroundResource(R.drawable.green_toggle);
    }
}

实际上这就是我所需要的...