私は 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>
これはひどく遅いことを知っています。しかし、これを非常に簡単に実現するには、マテリアルコンポーネントを使用するだけです。
アプリのテーマにはMaterialコンポーネントを使用する必要があります。
<resources>
<style name="MyAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Define your theme color values here. colorPrimary etc. -->
</style>
</resources>
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をプログラムで作成する必要はまったくありません(これは私の経験に関する個人的な意見です)。
さて、私は次の方法で解決する同じ問題も持っています。それはあなたのドローアブルフォルダにそれを置き、この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>
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"
/>
このコードは、プログラムで任意のビューに境界線を描画するために機能しています
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);
}
}
これを試してみてください。私は動的に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);
これは、エディットテキストの境界線を作成できます。これを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>
使用する
editText.setBackground(getResources().getDrawable(R.drawable.edit_text_back));
の状態
editText.setBackgroundResource(R.drawable.edit_text_back);