web-dev-qa-db-ja.com

Androidプログラムでテキストを編集するために境界線を追加します

私は this の例を使用し、editText.setBackgroundResource(R.drawable.edit_text_back);のようにプログラムで編集テキストに追加しようとしましたが、機能しません。どうすればこれを達成できますか?提案やアイデアはありますか?

[〜#〜] edit [〜#〜]editTextもプログラムで定義されます。

EditText editText = new EditText(this.getApplicationContext());

これをテーブルの行に追加しました

[〜#〜]試しました[〜#〜]

editText.setBackground(getResources().getDrawable(R.drawable.edit_text_back));
editText.setBackgroundDrawable(getResources().getDrawable(R.drawable.edit_text_back));

テキストの作成を編集

TableRow row = (TableRow) findViewById(R.id.table_row_kind);
TableRow.LayoutParams rowP = new TableRow.LayoutParams();
        rowP.setMargins(10, 0, 0, 0);
editText = new EditText(this.getApplicationContext());
editText .setGravity(Gravity.FILL_HORIZONTAL);
editText .setLayoutParams(rowP);
editText .setFilters(new InputFilter[]{txtFilter});
editText.setBackground(getResources().getDrawable(R.drawable.edit_text_back));

row.xml

<TableRow
    Android:id="@+id/table_row_kind"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:padding="5dip" >

    <TextView
       Android:layout_width="250sp"
       Android:text="Kind"
       Android:textAppearance="?android:attr/textAppearanceLarge" />
</TableRow>
14
Lunchbox

これはひどく遅いことを知っています。しかし、これを非常に簡単に実現するには、マテリアルコンポーネントを使用するだけです。

  1. アプリのテーマにはMaterialコンポーネントを使用する必要があります。

    <resources>
       <style name="MyAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
          <!-- Define your theme color values here. colorPrimary etc. -->
       </style>
    </resources>
    
  2. EditTextスタイルをstyles.xmlファイルで定義します。

    <style name="MyOutlinedEditText  parent="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> . 
       <!-- Define your edit text style options here. textSize, color, stroke width and color -->
    </style>
    

使用法(xml形式):

<EditText
    style="@style/MyOutlinedEditText"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"/>

プログラムによるテーマの適用は、もう少し努力が必要です。必要に応じて、その点についても説明します。そうは言っても、editTextをプログラムで作成する必要はまったくありません(これは私の経験に関する個人的な意見です)。

0
Lunchbox

さて、私は次の方法で解決する同じ問題も持っています。それはあなたのドローアブルフォルダにそれを置き、このxmlをそのEditTextの背景に設定するxmlファイルです

活動コード:

EditText foo = (EditText)findViewById(R.id.editText);
foo.setBackgroundResource(R.drawable.backtext);

backtext.xml

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" >
       <solid Android:color="#ffffff" />
       <stroke Android:width="1dip" Android:color="#000000"/>
    </shape>
19
mayuri

edittext.xmlファイルを描画可能なフォルダーに作成する

<?xml version="1.0" encoding="utf-8"?>
<!--  res/drawable/rounded_edittext.xml -->
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" Android:padding="10dp">
<solid Android:color="#FFFFFF"/>
<stroke
    Android:width="1dp"
    Android:color="@Android:color/black" />
<corners
 Android:bottomRightRadius="15dp"
 Android:bottomLeftRadius="15dp"
 Android:topLeftRadius="15dp"
Android:topRightRadius="15dp"/>
</shape>


in your main.xml
<EditText
background="drawable/edittext.xml"
/>
10
Pankaj Arora

このコードは、プログラムで任意のビューに境界線を描画するために機能しています

package com.example.border;

import Android.graphics.Canvas;
import Android.graphics.Color;
import Android.graphics.Paint;
import Android.graphics.drawable.ShapeDrawable;

public class ShapeDrawableWithoutBottom extends ShapeDrawable {
    private float mLineWidth = 1f;
    private final Paint mLinePaint;
    private int color;

    public ShapeDrawableWithoutBottom() {

        // No color specified, so call constructor with default color White
        this(Color.WHITE);
    }

    public ShapeDrawableWithoutBottom(int layoutColor) {

        // use the setter defined below, to set the main color for this drawable
        // setColor(color);
        setColor(layoutColor);
        // setup the Paint for drawing the lines
        mLinePaint = new Paint();
        mLinePaint.setStyle(Paint.Style.STROKE);
        mLinePaint.setStrokeWidth(mLineWidth);
    }

    public void setColor(int color) {
        Paint paint = getPaint();
        Paint.setColor(color);

    }

    public void setLineColor(int color) {
        this.color = color;
    }

    public void setLineWidth(float lineWidth) {
        mLineWidth = lineWidth;
        mLinePaint.setStrokeWidth(mLineWidth);
    }

    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);

        // bottom black line
        // //////////////////

        mLinePaint.setColor(Color.parseColor("#00000000"));
        mLinePaint.setAlpha((int) (255 * 0.0)); // Opacity 90%
        canvas.drawLine(getBounds().left, getBounds().bottom - mLineWidth
                * 0.5f, getBounds().right, getBounds().bottom - mLineWidth
                * 0.5f, mLinePaint);

        // translucent grey rim
        // /////////////////////

        mLinePaint.setColor(color);
        mLinePaint.setAlpha((int) (255 * 0.7)); // Opacity 70%

        // top
        canvas.drawLine(getBounds().left, getBounds().top + mLineWidth * 0.5f,
                getBounds().right, getBounds().top + mLineWidth * 0.5f,
                mLinePaint);

        // left
        canvas.drawLine(getBounds().left + mLineWidth * 0.5f,
                getBounds().bottom , getBounds().left + mLineWidth
                        * 0.5f, getBounds().top + mLineWidth, mLinePaint);

        // right
        canvas.drawLine(getBounds().right - mLineWidth * 0.5f,
                getBounds().bottom , getBounds().right - mLineWidth
                        * 0.5f, getBounds().top + mLineWidth, mLinePaint);

        // top white line
        // ///////////////

        mLinePaint.setColor(Color.WHITE);
        mLinePaint.setAlpha((int) (255 * 0.5)); // Opacity 50%
        canvas.drawLine(getBounds().left + mLineWidth, getBounds().top
                + mLineWidth * 1.5f, getBounds().right - mLineWidth,
                getBounds().top + mLineWidth * 1.5f, mLinePaint);
    }
}
3

これを試してみてください。私は動的にedittextを追加してから、その背景を設定して動作します。

 LinearLayout layout=(LinearLayout)findViewById(R.id.layout);
                    EditText edit=new EditText(MainActivity.this);
                    edit.setBackgroundResource(R.drawable.abc);
                    edit.setMaxWidth(100);
                    edit.setMinHeight(100);
                    edit.setText("hello");
                    layout.addView(edit);
1
mayuri

これは、エディットテキストの境界線を作成できます。これをres/drawableに保存します

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
        <item>
         <shape Android:shape="rectangle">
         <gradient Android:startColor="#f9f9f9"
                Android:centerColor="#ffffff"
                Android:endColor="#ffffff"
                Android:angle="90"/>
         <stroke  Android:width="1dp" Android:color="#2B547E"/>
        </shape>
         </item>
    </layer-list>
0
Akarsh M

使用する

 editText.setBackground(getResources().getDrawable(R.drawable.edit_text_back));

の状態

editText.setBackgroundResource(R.drawable.edit_text_back);
0
dharam