【问题标题】:How to create a custom EditText layout?如何创建自定义 EditText 布局?
【发布时间】:2019-05-29 16:56:49
【问题描述】:

我想创建一个如下图所示的 EditText。

This is what I want to achieve

这是我的代码(在布局的 xml 文件中):

<EditText
            android:id="@+id/newThoughtThoughtText"
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:background="@drawable/lines"
            android:gravity="top"
            android:hint="@string/thought_first_text"
            android:inputType="textMultiLine"
            android:maxLines="15"
            android:textColor="@color/color_gray"   />

我创建了一个自定义的可绘制布局文件。但这只能让我在末尾有一行,并且我需要在 EditText 内有几行。 我该怎么做?

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

    <item>
        <shape android:shape="rectangle">
            <stroke
            android:width="1dp"
            android:color="@color/color_gray" />
        </shape>
    </item>
</layer-list>

提前致谢!

【问题讨论】:

  • 嗨!您必须扩展 EditText 并覆盖 onDraw() 方法。我在这里也回答了类似的问题:stackoverflow.com/a/56212644/5823014
  • 谢谢,我检查了你的答案,它有帮助。顺便说一句,我设法做我想做的事。将在此处留下主题以获取更多问题并帮助其他人,以防万一。

标签: java android android-layout android-fragments textview


【解决方案1】:

要实现这一点,您必须对已创建的可绘制类进行更改。

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="-2dp"
    android:insetRight="-2dp"
    android:insetTop="-2dp">

    <shape android:shape="rectangle" >
        <stroke
            android:width="1dp"
            android:color="#000000" />
        <solid android:color="@color/md_grey_200" />
    </shape>

</inset>

这将为您提供边框底部,您可以根据需要更改颜色。 如果您不想为每个 EditText 提供边框,您可以像这样在每个 EditText 之后添加一个视图。

                    <View
                    style="@style/MenuDivider"
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:layout_marginEnd="5dp"
                    android:layout_marginStart="5dp"
                    android:layout_marginTop="15dp"
                    android:background="@color/black"/>

您可以根据自己的需要更改视图高度和背景。 希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    我设法解决了这个问题并根据需要设计了 editText。

    这个话题帮助了我:

    Android - How to make all lines in an edittext underlined?

    我创建了自己的自定义 EditText:

    package com.example.appsiety.utils;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.Rect;
    import android.support.v4.content.ContextCompat;
    import android.util.AttributeSet;
    
    import com.example.appsiety.R;
    
    public class EditTextThought extends android.support.v7.widget.AppCompatEditText {
        private Paint mPaint = new Paint();
        private Context context;
    
        public EditTextThought(Context context) {
            super(context);
            this.context = context;
            initPaint();
        }
    
        public EditTextThought(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.context = context;
            initPaint();
        }
    
        public EditTextThought(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            this.context = context;
            initPaint();
        }
    
        private void initPaint() {
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setColor(ContextCompat.getColor(context, R.color.color_gray));
        }
    
        @Override protected void onDraw(Canvas canvas) {
            int left = getLeft();
            int right = getRight();
            int paddingTop = getPaddingTop();
            int paddingBottom = getPaddingBottom();
            int paddingLeft = getPaddingLeft();
            int paddingRight = getPaddingRight();
            int height = getHeight();
            int lineHeight = getLineHeight();
            int count = (height-paddingTop-paddingBottom) / lineHeight;
    
            for (int i = 0; i < count*2; i++) {
                int baseline = lineHeight * (i+1) + paddingTop;
                canvas.drawLine(left+paddingLeft, baseline, right-paddingRight, baseline, mPaint);
            }
    
            super.onDraw(canvas);
        }
    }
    

    然后在我的布局文件中我使用了它:

    <view
    class="com.example.appsiety.utils.EditTextThought"
                android:id="@+id/newThoughtSituationText"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:layout_marginTop="5dp"
                android:layout_marginBottom="5dp"
                android:scrollbars="vertical"
                android:fadingEdge="vertical"
                android:gravity="top"
                android:textSize="18sp"
                android:fontFamily="@font/opensans_light"
                android:textColorHint="@color/color_gray"
                android:textColor="@color/color_gray"
                android:hint="@string/situation_first_text"
                android:background="@android:color/transparent"
                android:inputType="textMultiLine|textVisiblePassword"
                />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-18
      • 2018-01-23
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多