Изменить цвет границы относительного макета относительно фокуса внутреннего текста редактирования в Android - PullRequest
0 голосов
/ 18 октября 2019

У меня есть Относительный макет и несколько внутренних видов внутри него. Я должен изменить цвет границы относительного макета относительно фокуса внутреннего текста редактирования.

вот код макета:

  <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>

вот мой текстовый блок рисования:

<?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>

Как изменить цвет границы external_laoyout при фокусировке внутреннего текста редактирования my_password?

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Установите относительный фон макета на основе значения фокуса редактирования текста, полученного в слушателе изменений onFocus.

override fun onFocusChange(view: View?, hasFocus: Boolean) {
    val background: Int = if (hasFocus) {
        R.drawable.background_focused
    } else {
        R.drawable.normal_background
    }
    setLayoutBackground(background)
}

Отправьте сообщение, если у вас есть какое-либо лучшее решение.

0 голосов
/ 18 октября 2019

Вы можете создать собственную форму для вашего EditText

1: STATE_ENABLED должен проверить, включен ли Edittext / отключен.

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);

...