【发布时间】:2017-01-11 00:46:45
【问题描述】:
我正在为糖尿病患者和其他定期注射的人构建一个注射跟踪应用程序,并且我正在尝试在身体图像上对齐 8 个复选框,以便用户可以指定他们注射的位置。问题是现在对齐它只适用于非常特定的屏幕尺寸,并且每当尺寸不同时,复选框会四处移动,最终不会出现在正确的身体部位。有什么办法可以做到这一点吗?对边距进行硬编码似乎效果不佳。任何帮助,将不胜感激。谢谢你。
这是我希望它看起来像 ideally 的样子,这是它在 specific screen size 上的实际样子,它改变了一切。它当然比屏幕尺寸更大或更小的更极端。
这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.injectiontracker.MainActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/date_and_time_layout"
android:src="@drawable/blank_body" />
<CheckBox
android:id="@+id/abdomen_left"
style="@style/InjectionCheckbox"
android:layout_alignBaseline="@+id/abdomen_right"
android:layout_alignBottom="@+id/abdomen_right"
android:layout_toRightOf="@+id/abdomen_right"
android:layout_toEndOf="@+id/abdomen_right" />
<CheckBox
android:id="@+id/thigh_left"
style="@style/InjectionCheckbox"
android:layout_alignBaseline="@+id/thigh_right"
android:layout_alignBottom="@+id/thigh_right"
android:layout_toRightOf="@+id/thigh_right"
android:layout_toEndOf="@+id/thigh_right" />
<ImageView
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:src="@drawable/ic_save_black_48dp" />
<CheckBox
android:id="@+id/buttocks_left"
style="@style/InjectionCheckbox"
android:layout_below="@+id/abdomen_left"
android:layout_alignLeft="@+id/arm_left"
android:layout_alignStart="@+id/arm_left"
android:layout_marginLeft="24dp"
android:layout_marginStart="24dp" />
<CheckBox
android:id="@+id/arm_left"
style="@style/InjectionCheckbox"
android:layout_marginRight="74dp"
android:layout_marginEnd="74dp"
android:layout_above="@+id/abdomen_left"
android:layout_toLeftOf="@+id/save"
android:layout_toStartOf="@+id/save"
android:layout_marginBottom="16dp" />
<CheckBox
android:id="@+id/buttocks_right"
style="@style/InjectionCheckbox"
android:layout_width="wrap_content"
android:layout_alignBaseline="@+id/buttocks_left"
android:layout_alignBottom="@+id/buttocks_left"
android:layout_toRightOf="@+id/buttocks_left"
android:layout_toEndOf="@+id/buttocks_left" />
<CheckBox
android:id="@+id/arm_right"
style="@style/InjectionCheckbox"
android:layout_alignBaseline="@+id/arm_left"
android:layout_alignBottom="@+id/arm_left"
android:layout_toRightOf="@+id/buttocks_right"
android:layout_toEndOf="@+id/buttocks_right" />
<CheckBox
android:id="@+id/abdomen_right"
style="@style/InjectionCheckbox"
android:layout_marginLeft="55dp"
android:layout_marginStart="55dp"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<CheckBox
android:id="@+id/thigh_right"
style="@style/InjectionCheckbox"
android:layout_marginTop="11dp"
android:layout_below="@+id/buttocks_left"
android:layout_alignLeft="@+id/abdomen_right"
android:layout_alignStart="@+id/abdomen_right" />
【问题讨论】:
-
尝试约束布局
-
试试这个库 [link] (github.com/Lukle/ClickableAreasImages) 您可以在其中选中和取消选中用户单击的部分上的复选框。希望它也能保留在更大的屏幕尺寸上。未选中。希望它会有所帮助。
-
使用 Framelayout 解决这个问题
-
你可以试试这个答案link
-
非常感谢大家的建议。现在 PercentFrameLayout 如下所示适用于纵向,所以我计划尝试链接的库 Rv Lalwani 看看我是否可以让它也适用于横向。我会让你知道这是怎么回事:-) 如果这不起作用,我会更多地研究约束布局。我之前尝试过,但由于我对 android 很陌生,所以我不太清楚如何让它工作。
标签: android android-layout checkbox