android 旧设备的布局
android layout for older devices
我是 android 编程的新手,为了能够为旧的 (android 2.3.3) 设备制作应用程序,我在布局方面有点乱.我在 android 工作室的 GUI 编辑器中乱搞了很多东西,以制作(在我看来)一个非常漂亮的 GUI。然后我才注意到我在 API 23 中工作。这导致我的旧设备 (API 10) 的 GUI 完全混乱,然后我开始更改所有内容,以便它看起来至少非常适合我要为其开发的设备。
我使用了一个垂直方向的 LinearLayout
,在里面放了一些 TextView
s 和一个 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。
我已经四处张望了很多,到处都有其他解决方案和其他原因来解释为什么某些事情不起作用。我尝试了多种方法,但没有任何效果。我什至省略了我的按钮的漂亮形状,希望我能设法实现颜色变化,但我也没能做到。
我的问题可以这样问:
- 为什么我的代码不适用于 API 10?
- 如何让我心爱的按钮为 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);
}
}
实际上这就是我所需要的...
我是 android 编程的新手,为了能够为旧的 (android 2.3.3) 设备制作应用程序,我在布局方面有点乱.我在 android 工作室的 GUI 编辑器中乱搞了很多东西,以制作(在我看来)一个非常漂亮的 GUI。然后我才注意到我在 API 23 中工作。这导致我的旧设备 (API 10) 的 GUI 完全混乱,然后我开始更改所有内容,以便它看起来至少非常适合我要为其开发的设备。
我使用了一个垂直方向的 LinearLayout
,在里面放了一些 TextView
s 和一个 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。
我已经四处张望了很多,到处都有其他解决方案和其他原因来解释为什么某些事情不起作用。我尝试了多种方法,但没有任何效果。我什至省略了我的按钮的漂亮形状,希望我能设法实现颜色变化,但我也没能做到。
我的问题可以这样问:
- 为什么我的代码不适用于 API 10?
- 如何让我心爱的按钮为 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);
}
}
实际上这就是我所需要的...