选择后,为textView和editText添加边框形状,

时间:2018-09-16 11:57:54

标签: android xml android-layout shapes

我想为TextView和EditText创建边框形状,并在选择视图时显示它。

就像这张照片一样。

example

4 个答案:

答案 0 :(得分:5)

您应该使用drawable选择器来实现UI。

首先创建一个background_edit_text_default.xml,它是用户未选择EditText的背景。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="1dp"
        android:color="#333D46" />

    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>

然后创建一个background_edit_text_selected.xml,当用户选择EditText时,它就是EditText的背景。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="1dp"
        android:color="#EDB90E" />

    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>

接下来创建一个background_edit_text.xml,它将用作EditText的背景。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/background_edit_text_default" android:state_focused="false" />
    <item android:drawable="@drawable/background_edit_text_selected" android:state_focused="true" />

</selector>

最后将background_edit_text.xml设置为布局文件(例如activity_main)中EditText的背景。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/conteiner"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="20dp"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/background_edit_text" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="10dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/background_edit_text" />

</LinearLayout>

您已完成,无需在代码中添加任何内容。

答案 1 :(得分:1)

Drawable中创建xml文件并使用以下代码:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<corners android:radius="5dp" />
<stroke
      android:width="3dp"
      android:color="@color/yellow" />
</shape>

使用EditText创建另一个android:width="0dp"后,将其设置为 editText1.setOnClickListener{ editText1.setBackground(shape1); editText2.setBackground(shape0); } editText2.setOnClickListener{ editText1.setBackground(shape0); editText2.setBackground(shape1); } 的背景,并且当用户单击时,只需更改它们即可。

这是代码。

eval

您不能复制和执行此代码,但这是您的指南。!

答案 2 :(得分:1)

尝试这种方式

  

MainActivity

public class MainActivity extends AppCompatActivity {

    EditText edtEmail, edtPassword;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        edtEmail = findViewById(R.id.edtEmail);
        edtPassword = findViewById(R.id.edtPassword);

        edtEmail.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    edtEmail.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.edt_focus_bg));
                else
                    edtEmail.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.edt_unfocus_bg));
            }
        });

        edtPassword.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    edtPassword.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.edt_focus_bg));
                else
                    edtPassword.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.edt_unfocus_bg));
            }
        });


    }

}
  

layout.activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    android:orientation="vertical"
    tools:context=".FirstFragment">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:text="Email"
        android:textColor="#FFFFFF" />

    <EditText
        android:id="@+id/edtEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="10dp"
        android:background="@drawable/edt_focus_bg"
        android:imeOptions="actionNext"
        android:inputType="textEmailAddress" />


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="10dp"
        android:text="Password"
        android:textColor="#FFFFFF" />


    <EditText
        android:id="@+id/edtPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="10dp"
        android:background="@drawable/edt_unfocus_bg"
        android:imeOptions="actionNext"
        android:inputType="textPassword" />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="30dp"
        android:layout_marginEnd="10dp"
        android:background="@drawable/edt_focus_bg"
        android:gravity="center"
        android:text="Login"
        android:textColor="#fae81e" />


</LinearLayout>
  

drawable / edt_focus_bg

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="1dp"
        android:color="#fae81e" />

    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>
  

drawable / edt_unfocus_bg

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="1dp"
        android:color="#333D46" />

    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>
  

输出

https://www.youtube.com/watch?v=OvCqTc_y124

编辑

如果您想在登录TextView中添加与执行以下步骤相同的效果

  • tv_text_color.xml目录中创建一个res/color,例如

enter image description here

  • tv_bg.xml目录中创建一个res/drawable,例如
  

tv_text_color.xml的示例代码

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Focused and not pressed -->
    <item android:state_focused="true"
        android:state_pressed="false"
        android:color="#000000" />
    <!-- Focused and pressed -->
    <item android:state_focused="true"
        android:state_pressed="true"
        android:color="#fae81e" />

    <!-- Unfocused and pressed -->
    <item android:state_focused="false"
        android:state_pressed="true"
        android:color="#fae81e" />

    <!-- Default color -->
    <item android:color="#000000" />
</selector>
  

tv_bg.xml的示例代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/edt_focus_bg" 
        android:state_selected="true"/>
    <item android:drawable="@drawable/edt_focus_bg"
        android:state_pressed="true"/>
    <item android:drawable="@drawable/edt_unfocus_bg"/>

</selector>
  

现在在您的TextView中像这样使用

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:layout_marginTop="30dp"
    android:layout_marginEnd="10dp"
    android:textColor="@color/tv_text_color"
    android:background="@drawable/tv_bg"
    android:clickable="true"
    android:gravity="center"
    android:text="Login"
    />
  

输出textview

https://www.youtube.com/watch?v=Iu898vafXEk

编辑2

  

您还可以使用选择器对EditText进行相同的操作

edt_selector.xml目录中创建一个res/drawable文件,如下所示

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/edt_focus_bg"
        android:state_focused="true"/>
    <item android:drawable="@drawable/edt_unfocus_bg"/>

</selector> 
  

现在像这样在您的editext中使用

<EditText
    android:id="@+id/edtPassword"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:layout_marginTop="5dp"
    android:layout_marginEnd="10dp"
    android:background="@drawable/edt_selector"
    android:imeOptions="actionNext"
    android:inputType="textPassword" />

答案 3 :(得分:0)

将此添加到您的颜色文件夹中:

选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="your_border_color"/>
<item android:color="@android:color/transparent"/>
</selector>

将此添加到您的可绘制文件夹中:

背景:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="back_ground_color" />
<corners android:radius="5dp" />
<stroke
    android:width="3dp"
    android:color="@color/selector" />
</shape>

编辑文本:

<EditText>
   android:background="@drawable/background"
</EditText>