Java 如何创建自定义EditText布局?

Java 如何创建自定义EditText布局?,java,android,android-layout,android-fragments,textview,Java,Android,Android Layout,Android Fragments,Textview,我想创建一个编辑文本,如下图所示 这是我的代码(在布局的xml文件中): 我已经创建了一个自定义的可绘制布局文件。但这只允许我在末尾有一行,并且我需要在EditText中有几行。 我该怎么做 提前谢谢 要实现这一点,您必须对您创建的可绘制类进行更改 <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="-2dp" android:insetRight

我想创建一个编辑文本,如下图所示

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


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



提前谢谢

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

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

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

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

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

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

我设法解决了这个问题,并根据需要设计了编辑文本

这个话题帮助了我:

我创建了自己的自定义编辑文本:

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);
    }
}
package com.example.appsiety.utils;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Paint;
导入android.graphics.Rect;
导入android.support.v4.content.ContextCompat;
导入android.util.AttributeSet;
导入com.example.appsiety.R;
公共类EditTextThink扩展了android.support.v7.widget.AppCompatEditText{
私有油漆mPaint=新油漆();
私人语境;
公共编辑文本思想(上下文){
超级(上下文);
this.context=上下文;
initPaint();
}
公共EditTextThink(上下文、属性集属性){
超级(上下文,attrs);
this.context=上下文;
initPaint();
}
公共EditTextThink(上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
this.context=上下文;
initPaint();
}
私有void initPaint(){
mPaint.setStyle(油漆、样式、笔划);
setColor(ContextCompat.getColor(context,R.color.color\u gray));
}
@覆盖受保护的void onDraw(画布){
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 i=0;i
然后在我的布局文件中,我使用了它:

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

我设法解决了这个问题,并根据需要设计了编辑文本

这个话题帮助了我:

我创建了自己的自定义编辑文本:

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);
    }
}
package com.example.appsiety.utils;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Paint;
导入android.graphics.Rect;
导入android.support.v4.content.ContextCompat;
导入android.util.AttributeSet;
导入com.example.appsiety.R;
公共类EditTextThink扩展了android.support.v7.widget.AppCompatEditText{
私有油漆mPaint=新油漆();
私人语境;
公共编辑文本思想(上下文){
超级(上下文);
this.context=上下文;
initPaint();
}
公共EditTextThink(上下文、属性集属性){
超级(上下文,attrs);
this.context=上下文;
initPaint();
}
公共EditTextThink(上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
this.context=上下文;
initPaint();
}
私有void initPaint(){
mPaint.setStyle(油漆、样式、笔划);
setColor(ContextCompat.getColor(context,R.color.color\u gray));
}
@覆盖受保护的void onDraw(画布){
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 i=0;i
然后在我的布局文件中,我使用了它:

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


嗨!您必须扩展
EditText
并重写
onDraw()
方法。我在这里也回答了一个类似的问题:谢谢,我检查了你的答案,这很有帮助。顺便说一句,我想做什么就做什么。我将把这个话题留在这里,以便进一步提问,并帮助其他人,以防万一。嗨!您必须扩展
EditText
并重写
onDraw()
方法。我在这里也回答了一个类似的问题:谢谢,我检查了你的答案,这很有帮助。顺便说一句,我想做什么就做什么。我将把话题留在这里,以便进一步提问,并帮助其他人,以防万一。