在 Android 中更改相对于内部编辑文本焦点的相对布局的边框颜色
Change border colour of Relative Layout with respect to the focus of inner edit text in Android
我有一个相对布局和其中的一些内部视图。我必须根据内部编辑文本的焦点更改相对布局的边框颜色。
这里是布局代码:
<RelativeLayout
android:id="@+id/outer_layout"
android:layout_width="@dimen/layout_width"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_top"
android:background="@drawable/text_box">
<EditText
android:id="@+id/my_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:fontFamily="sans-serif"
android:hint="@string/password"
android:imeActionId="2"
android:inputType="textPassword"
android:nextFocusDown="@+id/login"
android:padding="@dimen/ield_padding"
tools:ignore="Autofill"/>
<FrameLayout
<----other layouts goes here--->
</FrameLayout>
</RelativeLayout>
这是我的 text_box 可绘制对象:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_focused="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff"/>
<corners android:radius="1px"/>
<stroke android:width="1.5dp" android:color="#ffffff"/> <!--outline stroke -->
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
</item>
<item >
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff"/>
<corners android:radius="10px"/>
<stroke android:width="1dp" android:color="#000000"/> <!--outline stroke -->
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
</item>
如何更改 outer_laoyout 的边框颜色以聚焦内部编辑文本 my_password?
您可以为 EditText 创建自定义形状
1:STATE_ENABLED是检查Edittext是否为enabled/disabled。
2: STATE_PRESSED 是检查 Edittext 何时被按下(它会改变按下时的颜色,但不会保持原样。)
3: STATE_FOCUSED 只要 Edittext 处于焦点状态,Edittext 的边框颜色就会保持不变(这满足要求)。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true"
android:state_focused="true">
<shape android:padding="10dp" android:shape="rectangle">
<solid android:color="#ffffffff" />
<stroke android:width="2dp" android:color="#ffffff" />
<corners android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp"
android:topLeftRadius="15dp" android:topRightRadius="15dp" />
</shape>
</item>
<item android:state_enabled="true">
<shape android:padding="10dp"
android:shape="rectangle">
<solid android:color="#ffffffff" />
<corners android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp"
android:topLeftRadius="15dp" android:topRightRadius="15dp" />
</shape>
</item>
</selector>
设置背景:
editText.setBackgroundResource(R.drawable.yourFile);
根据onFocus change listener中获取的编辑文本焦点值设置相对布局背景。
override fun onFocusChange(view: View?, hasFocus: Boolean) {
val background: Int = if (hasFocus) {
R.drawable.background_focused
} else {
R.drawable.normal_background
}
setLayoutBackground(background)
}
Post如果你有更好的解决方案。
我有一个相对布局和其中的一些内部视图。我必须根据内部编辑文本的焦点更改相对布局的边框颜色。
这里是布局代码:
<RelativeLayout
android:id="@+id/outer_layout"
android:layout_width="@dimen/layout_width"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_top"
android:background="@drawable/text_box">
<EditText
android:id="@+id/my_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:fontFamily="sans-serif"
android:hint="@string/password"
android:imeActionId="2"
android:inputType="textPassword"
android:nextFocusDown="@+id/login"
android:padding="@dimen/ield_padding"
tools:ignore="Autofill"/>
<FrameLayout
<----other layouts goes here--->
</FrameLayout>
</RelativeLayout>
这是我的 text_box 可绘制对象:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_focused="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff"/>
<corners android:radius="1px"/>
<stroke android:width="1.5dp" android:color="#ffffff"/> <!--outline stroke -->
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
</item>
<item >
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff"/>
<corners android:radius="10px"/>
<stroke android:width="1dp" android:color="#000000"/> <!--outline stroke -->
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
</item>
如何更改 outer_laoyout 的边框颜色以聚焦内部编辑文本 my_password?
您可以为 EditText 创建自定义形状
1:STATE_ENABLED是检查Edittext是否为enabled/disabled。
2: STATE_PRESSED 是检查 Edittext 何时被按下(它会改变按下时的颜色,但不会保持原样。)
3: STATE_FOCUSED 只要 Edittext 处于焦点状态,Edittext 的边框颜色就会保持不变(这满足要求)。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true"
android:state_focused="true">
<shape android:padding="10dp" android:shape="rectangle">
<solid android:color="#ffffffff" />
<stroke android:width="2dp" android:color="#ffffff" />
<corners android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp"
android:topLeftRadius="15dp" android:topRightRadius="15dp" />
</shape>
</item>
<item android:state_enabled="true">
<shape android:padding="10dp"
android:shape="rectangle">
<solid android:color="#ffffffff" />
<corners android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp"
android:topLeftRadius="15dp" android:topRightRadius="15dp" />
</shape>
</item>
</selector>
设置背景:
editText.setBackgroundResource(R.drawable.yourFile);
根据onFocus change listener中获取的编辑文本焦点值设置相对布局背景。
override fun onFocusChange(view: View?, hasFocus: Boolean) {
val background: Int = if (hasFocus) {
R.drawable.background_focused
} else {
R.drawable.normal_background
}
setLayoutBackground(background)
}
Post如果你有更好的解决方案。