2015-10-19 85 views
2

我在android编程方面是全新的,为了能够为旧的(android 2.3.3)设备生成应用程序,我在布局上进行了一些修改。我在Android工作室的GUI编辑器中混淆了很多东西,使得(在我看来)一个非常漂亮的GUI。然后我才注意到我在API 23中工作。这导致我的旧设备(API 10)完全搞砸了GUI,然后我开始改变一切,以至于看起来对于我想开发的设备对于。适用于较旧设备的Android布局

我与垂直方向的LinearLayout工作,把一些TextView S和在那里Chronometer和大结局(我的问题的原因)一个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

What I want to achieve (1) What I want to achieve (2)

工作210

我一直在环顾四周,处处都有其他的解决方案和其他原因,为什么某些事情不起作用。我尝试了很多东西,但没有任何结果。我甚至省略了我的按钮的漂亮形状,希望能够实现颜色变化,但我也没有设法做到这一点。

我的问题因此可以提如下:

  1. 是什么让我的代码不会对API 10工作?
  2. 我怎样才能让我心爱的按钮适用于API 10?

每一位的帮助表示赞赏。

+1

如果您使用的是较低版本(尤其是api级别14以下),则应使用支持库及其UI组件(例如,在api 10和23上获得类似的结果。 – Rich

+0

@Rithe然后我应该查找哪些库在这种情况下?一个支持选择器的库?一个支持按钮在一个切换按钮中着色的库?我该如何使用这样一个库?我有这种感觉,我已经无意中使用了这样的库,但我应该怎么知道如何使用库等?谢谢在任何情况下的暗示 –

+0

如果你想在所有版本中有相同的设计我推荐支持库v7(AppCompat),它允许你使用材料设计到版本2.1。有关更多信息,请参阅本网站:https://developer.android.com/tools/support-library/features.html#v7 – Rich

回答

0

我不知道为什么我的代码无法正常工作,但我设法通过以编程方式更改形状来轻松解决此问题。所以我在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); 
    } 
} 

而且实际上所有我需要...