【问题标题】:android layout for older devices旧设备的 android 布局
【发布时间】:2015-10-19 20:11:14
【问题描述】:

我是 android 编程的新手,为了能够为旧的 (android 2.3.3) 设备制作应用程序,我在布局方面有点混乱。我在 android studio 的 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?

感谢您的每一点帮助。

【问题讨论】:

  • 如果您使用的是较低版本(尤其是 api 级别 14 以下),您应该使用支持库及其 UI 组件(例如,在 api 10 和 23 上获得类似的结果。
  • @Rithe 在这种情况下我应该寻找什么库?支持选择器的库?支持切换按钮中按钮着色的库?我怎样才能使用这样的图书馆?我有这种感觉我已经无意中使用了这种库,但是我应该如何知道如何使用库等?无论如何感谢您的提示
  • 如果您想在所有版本中使用相同的设计,我推荐支持库 v7 (AppCompat),它允许您使用低至 2.1 版的材料设计。欲了解更多信息,请查看此网站:developer.android.com/tools/support-library/features.html#v7
  • @Rithe on this blog 我发现这些库只涵盖了小部件的一个子集,而 togglebutton 原来不属于这个子集......我注定要失败吗?

标签: android android-layout android-2.3-gingerbread


【解决方案1】:

我不知道为什么我的代码不起作用,但我设法通过以编程方式更改形状很容易地解决了这个问题。因此,我在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);
    }
}

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

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多