Android Spinner 自定义背景跨版本行为
Android Spinner Custom Background Cross Version Behaviour
我正在尝试在 android 微调器上实现自定义背景,我已经成功完成了。但是,在测试此交叉版本时会出现奇怪的行为。左笔画和右笔画都消失并出现"cut off",半径也不存在。
截图:
4.4.2(即意)
4.4.4 (即实际)
我希望两者都显示为 4.4.2。帮忙?
代码:
login.xml
<Spinner
android:id="@+id/login_domains"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_top"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_marginTop="25dp"
/>
<EditText
android:id="@+id/login_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_middle"
android:hint="@string/placeholder_username"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:maxWidth="300dp"
android:minWidth="300dp"
/>
<EditText
android:id="@+id/login_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_bottom"
android:hint="@string/placeholder_password"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:layout_marginBottom="10dp"
android:inputType="textPassword"
android:maxWidth="300dp"
android:minWidth="300dp"
/>
<Button
android:id="@+id/login_action_button"
android:background="@drawable/ee_yellow_button"
android:text="@string/splash_login_btn_login"
android:textColor="#000000"
android:textStyle="normal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:maxWidth="300dp"
android:minWidth="300dp" />
bootstrap_group_edittext_top.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp"
android:color="#CCCCCC" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="4dp"
android:topRightRadius="4dp"/>
<gradient
android:type="linear"
android:angle="-90"
android:centerColor="#FFFFFFFF"
android:startColor="#dddddd"
android:endColor="#FFFFFF"
android:centerY="2%"/>
</shape>
在一位同事的帮助下,我设法找到了原因。因为我为 Spinner 使用了固定宽度,所以背景的边界受到了限制。我在尝试实现 "maxWidth" 定义时使用它。
我通过创建一个类似于 this answer 的容器并将子元素更改为具有 match_parent
的 android:layout_width
并在左侧添加 10dp
的边距来解决此问题并赋予每个人以防止剪裁的权利。
完整代码(为了安全我删除了包):
<com.yourpackage.views.BoundedLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:minWidth="300dp"
app_name:bounded_width="300dp">
<TextView
android:id="@+id/login_error_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@drawable/bootstrap_alert_error"
android:visibility="gone"
android:textColor="#a94442"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
/>
<Spinner
android:id="@+id/login_domains"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_top"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_marginTop="25dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
/>
<EditText
android:id="@+id/login_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_middle"
android:hint="@string/placeholder_username"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
/>
<EditText
android:id="@+id/login_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_bottom"
android:hint="@string/placeholder_password"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginBottom="10dp"
android:inputType="textPassword"
/>
<Button
android:id="@+id/login_action_button"
android:background="@drawable/ee_yellow_button"
android:text="@string/splash_login_btn_login"
android:textColor="#000000"
android:textStyle="normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp" />
<TextView
android:id="@+id/login_need_access"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/mee_login_need_access"
android:layout_marginTop="25dp"
android:textColor="#FFFFFFFF"
/>
</com.yourpackage.views.BoundedLinearLayout>
我正在尝试在 android 微调器上实现自定义背景,我已经成功完成了。但是,在测试此交叉版本时会出现奇怪的行为。左笔画和右笔画都消失并出现"cut off",半径也不存在。
截图:
4.4.2(即意)
4.4.4 (即实际)
我希望两者都显示为 4.4.2。帮忙?
代码:
login.xml
<Spinner
android:id="@+id/login_domains"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_top"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_marginTop="25dp"
/>
<EditText
android:id="@+id/login_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_middle"
android:hint="@string/placeholder_username"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:maxWidth="300dp"
android:minWidth="300dp"
/>
<EditText
android:id="@+id/login_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_bottom"
android:hint="@string/placeholder_password"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:layout_marginBottom="10dp"
android:inputType="textPassword"
android:maxWidth="300dp"
android:minWidth="300dp"
/>
<Button
android:id="@+id/login_action_button"
android:background="@drawable/ee_yellow_button"
android:text="@string/splash_login_btn_login"
android:textColor="#000000"
android:textStyle="normal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:maxWidth="300dp"
android:minWidth="300dp" />
bootstrap_group_edittext_top.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp"
android:color="#CCCCCC" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="4dp"
android:topRightRadius="4dp"/>
<gradient
android:type="linear"
android:angle="-90"
android:centerColor="#FFFFFFFF"
android:startColor="#dddddd"
android:endColor="#FFFFFF"
android:centerY="2%"/>
</shape>
在一位同事的帮助下,我设法找到了原因。因为我为 Spinner 使用了固定宽度,所以背景的边界受到了限制。我在尝试实现 "maxWidth" 定义时使用它。
我通过创建一个类似于 this answer 的容器并将子元素更改为具有 match_parent
的 android:layout_width
并在左侧添加 10dp
的边距来解决此问题并赋予每个人以防止剪裁的权利。
完整代码(为了安全我删除了包):
<com.yourpackage.views.BoundedLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:minWidth="300dp"
app_name:bounded_width="300dp">
<TextView
android:id="@+id/login_error_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@drawable/bootstrap_alert_error"
android:visibility="gone"
android:textColor="#a94442"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
/>
<Spinner
android:id="@+id/login_domains"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_top"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_marginTop="25dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
/>
<EditText
android:id="@+id/login_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_middle"
android:hint="@string/placeholder_username"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
/>
<EditText
android:id="@+id/login_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bootstrap_group_edittext_bottom"
android:hint="@string/placeholder_password"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginBottom="10dp"
android:inputType="textPassword"
/>
<Button
android:id="@+id/login_action_button"
android:background="@drawable/ee_yellow_button"
android:text="@string/splash_login_btn_login"
android:textColor="#000000"
android:textStyle="normal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp" />
<TextView
android:id="@+id/login_need_access"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/mee_login_need_access"
android:layout_marginTop="25dp"
android:textColor="#FFFFFFFF"
/>
</com.yourpackage.views.BoundedLinearLayout>